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
    位,但确保它匹配遇到的第一个
  • 匹配文字

可能重复“回声返回不正确”-好吧,看看源代码,而不是浏览器呈现,或者转义HTML。您还没有提供PHP源代码-仅使用正则表达式是不够的:您如何使用它?@NiettheDarkAbsol我的错误,问题编辑。我测试了您的代码。它工作得很好。。。
~<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]'