您好!我试图将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采用第一个模式并将其替换为第一个替换,然后搜索第二个模式,但它搜索已修改字符串。 我必须使用支持正则表达式的函数。
答案 0 :(得分:1)
这是因为它们不是同时运行,而是循环运行。在第一次表达之后,您最终得到<b>a</b>bc
,因此第二个表达式不再需要abc
来匹配。
就像那样。这很好,因为感谢你不会以无效标记结束。你会。正则表达式是HTML或XML的严重问题。
使用一些DOM解释器和库,如PHP的DOMDocument