我必须使用PHP正则表达式将具有相同类名的所有span标记替换为单个span标记。我知道我们可以通过使用DOMDocument以及使用javascript / jQuery来实现这一点。我也尝试使用下面的代码,但它的关闭。
[<span(.*)><strong>*](.*)<\/strong><\/span>
以下是我所指的代码。
<span class="c28"><strong><span class=
"c28"><strong><span class="c28"><strong><span class=
"c28"><strong><span class="c28"><strong><span class=
"c28"><strong><span class="c28"><strong><span class=
"c28"><strong><span class="c28"><strong><span class=
"c28"><strong><span class="c28"><strong><span class=
"c28"><strong><span class="c28"><strong><span class=
"c28"><strong><span class="c28"><strong><span class=
"c28"><strong><span class="c28"><strong><span class=
"c28"><strong><span class="c28"><strong><span class=
"c28"><strong>Sending text messages that include links,
attachments and/or
pictures.</strong></span></strong></span></strong></span></strong></span></strong></span></strong></span></strong></span></strong></span></strong></span></strong></span></strong></span></strong></span></strong></span></strong></span></strong></span></strong></span></strong></span></strong></span></strong></span></strong></span>
我希望输出像
<span class="c28"><strong>Sending text messages that include links, attachments and/or pictures.</strong></span>
任何人都可以帮我解决这个正则表达式。感谢
答案 0 :(得分:0)
在这种情况下,您可以利用非空 <strong>
与文本内容定位的事实 - 这意味着您可以使用这个相当简单的模式:
正则表达式:.*?class="(\w+)".*(<strong>[^<]+<\/strong>).*
替换:<span class="$1">$2</span>
答案 1 :(得分:0)
应避免使用嵌套strong
。嵌套的span
也是如此,不管它们的类名是什么,它们会立即出现在另一个之后,表明滥用HTML实现。你可以选择:
(</?\w+[^>]*>)(?1)*\1
PHP代码:
preg_replace('~(</?\w+[^>]*>)(?1)*\1~', '\\1', $string);