假设我有一串html。我们称之为$html
只是为了原创,它看起来像这样:
<h6><a href="1a">ABC</a> | <a href="1b" target="_blank">XXX</a></h6>
<p>fffffff
<h6><a href="2a">DEF</a> | <a href="2b" target="_blank">XXX</a></h6>
<p>ddddddd
<h6><a href="3a">GHI</a> | <a href="3b" target="_blank">XXX</a></h6>
<p>bbbbbbb
我想从每个href
标记的第二个链接中获取target
和H6
,并将其用于标记中的第一个链接,然后删除|
完全是第二个链接所以它看起来像这样:
<h6><a href="1b" target="_blank">ABC</a></h6>
<p>fffffff
<h6><a href="2b" target="_blank">DEF</a></h6>
<p>ddddddd
<h6><a href="3b" target="_blank">GHI</a></h6>
<p>bbbbbbb
我知道我需要使用HTML解析器,但我不确定如何使用它。这样做最简单的方法是什么?我在PHP中这样做。
答案 0 :(得分:1)
如您所知,HTML不是常规语言,因此无法通过正则表达式完全解析。但是,在这种情况下,您可以使用正则表达式完成所需的操作。替换:
<h6><a href=".*?">(.*?)</a> \| <a href="(.*?)" target="(.*?)">.*?</a></h6>
使用:
<h6><a href="$2" target="$3">$1</a></h6>
当然,这假设没有任何意外:也就是说,您的标签没有其他属性,如类或ID,并且一切都是一致的。如果他们这样做,你有一个稍微复杂的问题,需要一个完整的解析器,或多个正则表达式。
答案 1 :(得分:1)
您可以使用以下代码:
$input='<h6><a href="1a">ABC</a> | <a href="1b" target="_blank">XXX</a></h6>\n' .
'<p>fffffff\n' .
'<h6><a href="2a">DEF</a> | <a href="2b" target="_blank">XXX</a></h6>\n' .
'<p>ddddddd\n' .
'<h6><a href="3a">GHI</a> | <a href="3b" target="_blank">XXX</a></h6>\n' .
'<p>bbbbbbb';
echo preg_replace(
'#<h6><a href=".*?">(.*?)</a> \| <a href="(.*?)" target="(.*?)">.*?</a></h6>#',
'<h6><a href="$2" target="$3">$1</a></h6>',
$input
);