【发布时间】:2015-04-30 07:26:56
【问题描述】:
如何使用重叠的正则表达式替换字符串?
你好!我试图将 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><i>a</b>bc</i>是无效标记吗?您需要<i><b>a</b>bc</i>才有效! -
是的,这不是问题
-
问题的一部分是正则表达式不是适合这项工作的工具,DOM 是正确的工具
-
@vks 这不是解决方案,我得到 1 个或多个正则表达式,它们可能会或可能不会定义相同的语言
-
@MarkBaker 你能解释一下如何使用 DOM 工具吗?
标签: php regex string preg-replace overlapping