0

我有一些文字,如下所示:

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

我想要的是保留Unknown Text,但摆脱 ( SOME KNOWN TEXT)(SOME OTHER KNOWN TEXT)

我认为 preg_replace 会给我我想要的,但我需要正则表达式来替换它:

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

有了这个 ..

Unknown Text

我看到preg_replace需要 3 个参数,即regex、 replace textsubject

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

谢谢

- -更新 - -

(SOME OTHER KNOWN TEXT) 片段可能存在于文本的其他位置,但我不希望它被删除,除非它遵循(SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT)的模式。我认为最初的 str_replace 建议不会因此而起作用。

4

3 回答 3

4

条件是什么?如果你有:

(一些其他已知文本)未知文本(一些已知文本)

(即如果括号文本被交换),你还想删除它吗?已知文本必须始终位于行首还是行尾?如果其中任何一个的答案都是肯定的,那么您最好使用正则表达式。像这样的东西:

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

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

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

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

于 2009-12-29T15:47:19.140 回答
3

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

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

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

于 2009-12-29T15:38:48.533 回答
2

如果这两个文本真的是已知的,你可以这样做:

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

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

于 2009-12-29T15:38:19.683 回答