我想从html标签中提取作者姓名。标签看起来像这样:
<a href="http://somewhere.com"> Manfred </a>
但是如果名字很长,它看起来像这样:
<a title="floormanager004" href="http://somewhere.com"> floormanage... </a>
我有以下正则表达式来涵盖这两种情况:
~<a.*(title="(.{2,50})".*|>(.*))</a>~Usi
这在第二种情况下工作正常,返回一个二维数组,如下所示:
array(2) {
[0]=>
string "title="floormanager004" href="http://somewhere.com"> floormanage... "
[1]=>
string "floormanager004"
}
但是对于第一种情况,该数组包含一个额外的空字段:
array(2) {
[0]=>
string "> Manfred "
[1]=>
string ""
[2]=>
string " Manfred "
}
为什么会显示此字段以及如何摆脱它?
声明: 我知道当使用正则表达式解析HTML时,你会有一个baaaaad时间,你永远不应该这样做,但在我的情况下,它被证明比XPATH等更快。请不要对此发表评论。
答案 0 :(得分:1)
每次在整个正则表达式上成功匹配时,每组括号都会在返回的数组中有一个关联的值,即使括号位匹配的内容是什么也没有。当某些捕获可能为空时,您的代码需要检测并处理该情况。
答案 1 :(得分:0)
好的ol&#39;缺少title属性。曼弗雷德。
适用于这些情况:
~<a.*>(.*)</a>~Usi
我无法理解这一点:请参阅Stackoverflow上投票率第二高的问题。我建议你阅读整篇文章: