我有一个像下面的html代码(只是其中的一部分)
<p>
<strong>
<div align="center">
<a onclick="return hs.expand(this)" href="http://example.com/somesome.png">
<img title="some-bla-bla-text" src="http://example.com/somesome.png"
alt="some-bla-bla-text" />
</a>
</div>
</strong><br />
<strong>
<div align="center">...
并希望将其删除为
<p>
<strong>
<div align="center">
<img title="some-bla-bla-text" alt="some-bla-bla-text" />
</div>
</strong><br />
<strong>
<div align="center">...
如何删除<a onclick="return hs.expand(this)" href="http://example.com/somesome.png">
及其结束标记</a>
此字符串的一部分?
我认为<a onclick="return hs.expand(this)"....>
和</a>
之间匹配的正则表达式非常有用
答案 0 :(得分:4)
正则表达式不够强大,因为HTML不是常规语言。它可能在某些情况下有效,但是当给出不同的,完全有效的HTML输入时,它将是非常脆弱的代码。你应该研究DOMDocument
。它允许您轻松解析HTML。
答案 1 :(得分:2)
通过一些测试和调整,你可能会得到类似以下内容的工作
$html = preg_replace('/\<a[^>]*\>((?!\<\/a\>).)*\<\/a\>/i', '\1', $html);
它基本上说,找到一个打开的标签,然后找到所有内容直到下一个关闭标签
答案 2 :(得分:1)
您可以使用正则表达式执行所需操作,但需要提供更多详细信息。你想删除所有锚元素,用它们里面的东西替换它们吗?或者只包含那些包含IMG标签的人?这是一个正则表达式,只剥离那些第一个属性为onclick
的
$s= preg_replace('~\s*<a\s+onclick="[^"]*"[^>]*>((?:(?!</a>).)*)</a>\s*~is', '$1', $s);
<强> see a demo on ideone.com 强>
编辑:此正则表达式将匹配具有onclick
属性的锚元素(不一定是第一个)。
'~\s*<a[^>]*\s+onclick="[^"]*"[^>]*>((?:(?!</a>).)*)</a>\s*~is'
<强> demo 强>