我有一些文字,是这样的:

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)');

这比一个正则表达式的性能更好。第一个参数是所述组键,以取代的,第二个参数是如何处理替换它,并且第三个是主题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top