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

2022-08-30 11:57:46

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

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

不过,这会将整个字符串替换为“”。我只想删除 text2,但保留 text1 和 text3 不变。如何仅匹配和替换字符串中匹配的部分?


答案 1

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

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

答案 2

有一种替代方法,可以使用和在匹配模式中,然后通过替换字符串将它们放回。您可以使用如下断言text1text3

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

这样,正则表达式仅查找是否存在,但在应用替换时不考虑这两个字符串。

有关详细信息,http://www.regular-expressions.info/lookaround.html


推荐