preg_replace如何在选择器中仅替换匹配的xxx($ 1)yyy模式

时间:2011-02-04 12:55:01

标签: php regex replace preg-match regex-group

我正在尝试使用正则表达式来仅擦除字符串的匹配部分。我正在使用preg_replace函数,并尝试通过在匹配部分周围放置括号来删除匹配的文本。例如:

preg_replace('/text1(text2)text3/is','',$html);

这会用''取代整个字符串。我只想删除text2,但保留text1和text3完整。如何匹配和替换匹配的字符串部分?

4 个答案:

答案 0 :(得分:37)

可以选择在匹配模式中使用text1text3,然后通过替换字符串将它们重新放入。您可以像这样使用断言

preg_replace('/(?<=text1)(text2)(?=text3)/', "", $txt);

这样,正则表达式只针对 presence ,但在应用替换时不考虑这两个字符串。

http://www.regular-expressions.info/lookaround.html了解更多信息。

答案 1 :(得分:34)

使用backreferences(即括号)仅保留要记住的表达式部分。您可以使用$1$2等调用替换字符串中的内容:

preg_replace('/(text1)text2(text3)/is','$1$2',$html);

答案 2 :(得分:11)

试试这个:

$text = preg_replace("'(text1)text2(text3)'is", "$1$2", $text);

希望它有效!

修改:\\1\\2更改为$1$2,这是推荐的方法。

答案 3 :(得分:-4)

最简单的方法有几种类型。另一个想法是前瞻/回顾,这次他们过度杀戮但通常非常有用。