的preg_replace或str_replace函数
-
21-09-2019 - |
题
我有一些文字,是这样的:
Paragraphs of text
(SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT)
Some additional paragraphs of text
我要的是保持在未知文本,但摆脱了(一些已知TEXT)的和(其它一些已知的文本)
我认为preg_replace函数会给我我想要的,但我需要的正则表达式来替换这样的:
(SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT)
与此..
Unknown Text
我看到的preg_replace 强>采用3个参数,在正则表达式下,在替换文本下,和主题即可。
有一种方法,以未知的文本的值传递给替换文本参数,OR,一种方法来reaplce的左和右片的(一些已知TEXT)和(适用某些其它KNOW TEXT)强>不除去未知文本?另外,有一个的 str_replace函数()强>解决这个?
由于
<强> --- --- UPDATE 强>
在(某些其他已知的文本)片可以存在于在文本其他地方,但我不希望它移除,除非它遵循的(一些已知TEXT)未知文本的图案(某些其他已知的文本) 即可。我想最初的str_replace函数的建议不会因为这项工作。
解决方案
的条件是什么?如果您有:
(某些其他已知的文本)未知文本(一些已知TEXT)
(即,如果包围文本交换),你还是想删除它?必须在已知的文本总是在一行的开头或结尾?如果答案是肯定的任意一个,你可能会更好过使用正则表达式。是这样的:
$new_text = preg_replace('/^\(SOME KNOWN TEXT\)(.+)\(SOME OTHER KNOWN TEXT\)$/m, '$1', $text);
在反斜杠(\
)是逃避(
和)
字符,其中在正则表达式特殊的含义。我假设你要改变内容 - 你可以在这一点上删除
在这个表达式中, .
是一个特殊的运营商的意思是“任何字符”。它会匹配任何字符。的 +
手段“一个或多个”,并且是前一操作者调节剂 - 一起,这些可以被解释为匹配“一个或多个任意字符”。的(
和)
字符用于在子模式捕获的文本部分。通过包含在括号中的.+
,我们抓住这个在替换使用。第一部分由(
和)
包围由正则表达式引擎标记$1
。如果我们有更多的,他们会被标记$2
,$3
,等等。
如果没有这些应用,可以使用str_replace
函数如在其它的答案中提到。
其他提示
您可以简单地提供str_replace函数与要删除这样的字符串数组:
$destString = str_replace(array('TEXT A', 'TEXT B'), '', $sourceString);
如果你不需要任何聪明模式匹配,这将是一个更快的解决方案比正则表达式。
如果两个文本确实是已知的,你可以这样做:
$result = str_replace(array('(SOME KNOWN TEXT)', '(SOME OTHER KNOWN TEXT)'), '', '(SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT)');
这比一个正则表达式的性能更好。第一个参数是所述组键,以取代的,第二个参数是如何处理替换它,并且第三个是主题。