如何使用重叠的正则表达式替换字符串?
您好!我正在尝试将 html 标签添加到字符串中。我正在使用函数 preg_replace(),但是当我在数组中的模式重叠时,preg_replace 不起作用。
$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 采用第一个模式并将其替换为第一个替换,然后搜索第二个模式,但它搜索的是 modified 字符串。 我必须使用支持正则表达式的函数。
最佳答案
因为它们不是同时运行,而是循环运行。在第一次表达之后,你最终得到 <b>a</b>bc
所以没有更多的abc
用于匹配第二个表达式。
就是这么简单。这很好,因为有了它,您不会以无效标记结束。你会。正则表达式是 HTML 或 XML 的严重问题。
使用一些 DOM 解释器和库,比如 PHP 的 DOMDocument
关于PHP 使用重叠的正则表达式替换字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28767531/