我有一些文字,如下:
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建议不会起作用。
答案 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)');
这是比正则表达式更好的性能。第一个参数是要替换的键集,第二个参数是替换它的内容,第三个参数是主题。