我有一些短信,像这样的:
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个参数,regex、替换文本和subject。
是否有一种方法可以将未知文本的值传递给替换文本参数OR,这是一种在不删除未知文本的情况下获取左、右段(一些已知文本)和(一些其他已知文本)的方法吗?或者,对此是否有str_replace()解决方案?
谢谢
---UPDATE---
(其他一些已知文本)片段可能存在于文本中的其他地方,但我不希望它被删除,除非它遵循(一些已知文本)未知文本(一些其他已知文本)的模式。我认为最初的str_replace建议会因为这一点而无效。
发布于 2009-12-29 15:47:19
条件是什么?如果你有:
(另一些已知文本)未知文本(一些已知文本)
(即,如果交换了括号内的文本),您还想删除它吗?已知文本必须始终位于行首或行尾吗?如果这两种方法的答案都是肯定的,那么最好使用正则表达式。就像这样:
$new_text = preg_replace('/^\(SOME KNOWN TEXT\)(.+)\(SOME OTHER KNOWN TEXT\)$/m, '$1', $text);反斜杠(\)是用来转义在正则表达式中具有特殊意义的(和)字符。我假设您想要更改内容--您可以在这一点上删除它们。
在这个正则表达式中,.是一个特殊的运算符,意思是“任意字符”。它将与任何字符匹配。+的意思是“一个或多个”,是前一个操作符上的修饰符,可以解释为匹配“任意字符中的一个或多个字符”。(和)字符用于捕获子模式中的文本部分。通过将.+包含在括号中,我们捕获了要在替换中使用的内容。由(和)包围的第一部分由regex引擎标记为$1。如果我们有更多,他们就会被贴上$2,$3等标签。
如果这两种方法都不适用,您可以使用其他答案中提到的str_replace函数。
发布于 2009-12-29 15:38:48
您可以简单地为str_replace提供一个要删除的字符串数组,如下所示:
$destString = str_replace(array('TEXT A', 'TEXT B'), '', $sourceString);如果您不需要任何聪明的模式匹配,这将是一个比regex更快的解决方案。
发布于 2009-12-29 15:38:19
如果这两篇文章确实为人所知,你可以这样做:
$result = str_replace(array('(SOME KNOWN TEXT)', '(SOME OTHER KNOWN TEXT)'), '', '(SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT)');这比正则表达式更好的性能。第一个参数是要替换的一组键,第二个参数是用什么替换它,第三个参数是主题。
https://stackoverflow.com/questions/1975215
复制相似问题