我正在尝试使用正则表达式仅擦除字符串的匹配部分。我正在使用该preg_replace
函数,并尝试通过在匹配部分周围放置括号来删除匹配的文本。例子:
preg_replace('/text1(text2)text3/is','',$html);
这会用 '' 替换整个字符串。我只想擦除 text2,但保持 text1 和 text3 不变。如何匹配和替换匹配的字符串部分?
我正在尝试使用正则表达式仅擦除字符串的匹配部分。我正在使用该preg_replace
函数,并尝试通过在匹配部分周围放置括号来删除匹配的文本。例子:
preg_replace('/text1(text2)text3/is','',$html);
这会用 '' 替换整个字符串。我只想擦除 text2,但保持 text1 和 text3 不变。如何匹配和替换匹配的字符串部分?
使用反向引用(即括号)仅保留您想要记住的表达式部分。$1
您可以使用,$2
等调用替换字符串中的内容:
preg_replace('/(text1)text2(text3)/is','$1$2',$html);
text1
除了在匹配模式中使用andtext3
然后通过替换字符串将它们放回原处之外,还有一种替代方法。你可以使用这样的断言:
preg_replace('/(?<=text1)(text2)(?=text3)/', "", $txt);
这样,正则表达式只查找存在,但在应用替换时不考虑这两个字符串。
尝试这个:
$text = preg_replace("'(text1)text2(text3)'is", "$1$2", $text);
希望它有效!
编辑:更改\\1\\2
为$1$2
推荐的方式。
最简单的方法已经提到了几种类型。另一个想法是前瞻/回溯,这一次它们有点过头了,但通常非常有用。