我正在尝试使用正则表达式来仅擦除字符串的匹配部分。我正在使用preg_replace
函数,并尝试通过在匹配部分周围放置括号来删除匹配的文本。例如:
preg_replace('/text1(text2)text3/is','',$html);
这会用''取代整个字符串。我只想删除text2,但保留text1和text3完整。如何匹配和替换匹配的字符串部分?
答案 0 :(得分:37)
可以选择在匹配模式中使用text1
和text3
,然后通过替换字符串将它们重新放入。您可以像这样使用断言:
preg_replace('/(?<=text1)(text2)(?=text3)/', "", $txt);
这样,正则表达式只针对 presence ,但在应用替换时不考虑这两个字符串。
答案 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)
最简单的方法有几种类型。另一个想法是前瞻/回顾,这次他们过度杀戮但通常非常有用。