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

PHP replace string using overlapping regular expressions

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

您好!我正在尝试将 html 标签添加到字符串中。我正在使用函数 preg_replace(),但是当我在数组中的模式重叠时,preg_replace 不起作用。

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

这会产生以下输出:

<b>a</b>bc

但我期待这样的输出:

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

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

因为它们不是同时运行,而是在循环中。在第一个表达式之后你以 <b>a</b>bc 结束,所以没有更多的 abc 可以匹配第二个表达式。

就是这样。这很好,因为有了它,您 不会以无效标记结束 。你会。 HTML 或 XML 的正则表达式存在严重问题。

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