Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP使用重叠正则表达式替换字符串 如何使用重叠正则表达式替换字符串?_Php_Regex_String_Preg Replace_Overlapping - Fatal编程技术网

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

PHP使用重叠正则表达式替换字符串 如何使用重叠正则表达式替换字符串?,php,regex,string,preg-replace,overlapping,Php,Regex,String,Preg Replace,Overlapping,你好!!我正在尝试将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($patte

你好!!我正在尝试将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);
$string='abc';
$patterns[0]='/a/';
$patterns[1]='/abc/';
$replacements[0]=“$0”;
$replacements[1]=“0美元”;
echo preg_replace($patterns,$replacements,$string);
这将产生以下输出:

<b>a</b>bc
abc
但我预期的结果是:

<b><i>a</b>bc</i>
abc
preg_replace似乎取第一个模式,用第一个替换替换它,然后搜索第二个模式,但它在modified字符串中搜索。
我必须使用支持正则表达式的函数,因为它们不是同时运行的,而是循环运行的。在第一个表达式之后,您以
abc
结束,因此第二个表达式不再有任何要匹配的
abc

就这么简单。这很好,因为正因为如此,您才不会以无效的标记结束。你会。正则表达式是HTML或XML的严重问题


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

,您是否意识到
abc
是无效的标记?您需要
abc
才能生效!是的,我知道,这不是问题所在。问题的一部分是regexp不是合适的工具,DOM是合适的工具tool@vks这不是解决方案,我得到一个或多个正则表达式,它们可能定义相同的正则表达式,也可能不定义相同的正则表达式language@MarkBaker你能解释一下如何使用DOM工具吗?你能解释一下如何在PHP中使用DOM库吗?我从来没有听说过。。。