PHP使用重叠的正则表达式替换字符串


PHP replace string using overlapping regular expressions

如何使用重叠的正则表达式替换字符串

你好!我正在尝试将html标签添加到字符串中。我使用函数preg_replace(),但当数组中的模式被覆盖时,preg_repllace就不起作用了。

$string = 'abc';
$patterns[0] = '/a/';
$patterns[1] = '/abc/';
$replacements[0] = '<b>$0</b>';
$replacements[1] = '<i>$0</i>';
echo preg_replace($patterns, $replacements, $string);

这会产生以下输出:

<b>a</b>bc

但我期待这个输出:

<b><i>a</b>bc</i>

似乎preg_replace采用了第一个模式,并用第一个替换替换它,然后搜索第二个模式,但它在修改的字符串中搜索。我必须使用支持正则表达式的函数。

这是因为它们不是同时运行的,而是循环运行的。在第一个表达式之后,您得到的是<b>a</b>bc,所以第二个表达式不再有任何abc可以匹配。

就这么简单。这很好,因为正因为如此,

不会以无效标记结束。你会的。Regex是HTML或XML的严重问题。

使用一些DOM解释器和库,如PHP的DOMDocument