preg_replace或str_replace

时间:2009-12-29 15:33:32

标签: php preg-replace str-replace

我有一些文字,如下:

Paragraphs of text
(SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT)
Some additional paragraphs of text

我想要的是保留未知文字,但摆脱(某些文字)(其他一些已知的文字)

我认为preg_replace会给我我想要的东西,但是我需要使用正则表达式替换它:

(SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT)

用这个..

Unknown Text

我看到 preg_replace 有3个参数,正则表达式替换文字主题。< / p>

有没有办法将未知文本的值传递给替换文本参数,或者是一种重新获得左右部分的方法(某些文字)(其他一些)知道文字)而不删除未知文本?或者,是否有 str_replace()解决方案?

由于

--- --- UPDATE

(某些其他已知的文本)文章可能存在于文本的其他位置,但我不希望它被删除,除非它遵循(某些已知的文本)未知文本(其他一些已知文本)的模式即可。我认为最初的str_replace建议不会起作用。

3 个答案:

答案 0 :(得分:4)

有什么条件?如果你有:

  

(其他一些文字)未知文字(某些文字)

(即如果交换包围文本),你还想删除吗?已知文本是否必须始终位于行的开头或结尾?如果其中任何一个的答案都是肯定的,那么你最好使用正则表达式。像这样:

$new_text = preg_replace('/^\(SOME KNOWN TEXT\)(.+)\(SOME OTHER KNOWN TEXT\)$/m, '$1', $text);

反斜杠(\)将转义()字符,这些字符在正则表达式中具有特殊含义。我假设您要更改内容 - 您可以在此时删除它们。

在这个正则表达式中,.是一个特殊的运算符,意思是“任何字符”。它会匹配任何角色。 +表示“一个或多个”,并且是前一个运算符的修饰符 - 这些可以解释为匹配“任何一个或多个字符”。 ()字符用于捕获subpattern中文本的各个部分。通过在括号中包含.+,我们捕获它以用于替换。由()包围的第一部分由正则表达式引擎标记为$1。如果我们有更多内容,则会将其标记为$2$3,依此类推。

如果这些都不适用,您可以使用其他答案中提到的str_replace功能。

答案 1 :(得分:3)

你可以简单地为str_replace提供你想要删除的字符串数组:

$destString = str_replace(array('TEXT A', 'TEXT B'), '', $sourceString);

如果您不需要任何聪明的模式匹配,这将是比正则表达式更快的解决方案。

答案 2 :(得分:2)

如果真正知道这两个文本,你可以这样做:

$result = str_replace(array('(SOME KNOWN TEXT)', '(SOME OTHER KNOWN TEXT)'), '', '(SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT)');

这是比正则表达式更好的性能。第一个参数是要替换的键集,第二个参数是替换它的内容,第三个参数是主题。