Php preg_替换为模式和html标记不起作用
我有这个:Php preg_替换为模式和html标记不起作用,php,Php,我有这个: <span style="color:#ff8c00;"><strong>Benjamin Franklin</strong></span> or <span style="color:#ff8c00;"><strong><em>Benjamin Franklin</em></strong></span> or <span style="color:#ff8c
<span style="color:#ff8c00;"><strong>Benjamin Franklin</strong></span>
or
<span style="color:#ff8c00;"><strong><em>Benjamin Franklin</em></strong></span>
or
<span style="color:#ff8c00;">Benjamin Franklin</span>
PHP
$text=preg\u replace(
排列(
“~*\b样式=[\'\“]color\:([\\\\,a-zA-Z0-9\(\)\,]+)\;[\'\'”]>([\]+)(.+?)([\]+)~is',
),
排列(
“[color=$1]$2$3$4[/color]”,
),ltrim($text));
echo$文本;
问候
编辑:我的问题是非常不同的,我的模式在上面发布的RegExr链接中运行得非常好,但在PHP回送返回错误的情况下,我真的不会求助于使用XPath。这并不容易,但这可能会满足您的需要
'<span.+?style=(\'|\")color\:(.+?)\1[^>]*>(.+?)(?=\<\/span\>)<\/span>'
说明
匹配任何非a>\]*
匹配文字
匹配并捕获任何非贪婪的内容(.+?)
正向前瞻锚定非贪婪匹配,很像(?=\)
或样式=
位,但确保它匹配遇到的第一个\1
匹配文字
~<span\s[^>]*\bstyle=[\'\"]color\:([\#a-zA-Z0-9\(\)\,]+)\;[\'\"]>([\<a-z0-9\>]+)(.+?)\s([\<\/a-z0-9\>]+)<\/span>~is
[/[color=#Benjamin Franklin
$text = preg_replace(
array(
'~<span\s[^>]*\bstyle=[\'\"]color\:([\#a-zA-Z0-9\(\)\,]+)\;[\'\"]>([\<a-z0-9\>]+)(.+?)([\<\/a-z0-9\>]+)<\/span>~is',
),
array(
'[color=$1]$2$3$4[/color]',
), ltrim($text));
echo $text;
'<span.+?style=(\'|\")color\:(.+?)\1[^>]*>(.+?)(?=\<\/span\>)<\/span>'
'[color=$2]$3[/color]'