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
如何使用重叠的正则表达式替换字符串?
您好!我正在尝试将 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