我是那种在这种情况下认为使用正则表达式是个坏主意的人之一。
即使你只是想一个href
属性从<a>
标签相匹配,您正则表达式的表达式会在整个html文档,这使得任何基于正则表达式的解决方案混乱,不安全和臃肿的运行。
另外,使用XML解析器匹配来自标签的href属性几乎没有问题。
我一直在解析HTML页面,每周至少2年。起初,我使用完整的正则表达式解决方案,我认为它比使用HTML解析器更简单更简单。
但我必须回来对我的代码相当多,原因是多方面的:
- 的源代码已经改变
源页面的
- 一个打破了HTML和我没有测试它
- 我没有尝试我的源代码的每一页的代码,只是找出其中的一些没有工作。
- ...
我发现,固定用长正则表达式模式不完全是最有趣的事情,你必须一次又一次地把你的心了吧。
我通常从现在开始是:用tidy
清理html源代码
- 。
- 使用
DOM
+ Xpath
实际解析页面并提取我想要的部分。
- 使用正则表达式只在小纯文本的部件(例如trimed节点的
textContent
)
的代码更健壮,我没有花2小时在很长的正则表达式查找为什么它不适合1%的消息来源,它只是感觉不错。
现在,即使在我不关心结束标签,我有一个非常具体的结构,我仍然使用基于DOM的解决方案,以提高我的技能与DOM库,只是产生更好的代码的情况。
我不喜欢在这里看到的人谁刚刚发表评论,每个HTML +正则表达式“不要在HTML中使用正则表达式”标签的问题,但不提供示例代码什么的开始。
这里是匹配从PHP链接的href属性,只是为了显示使用HTML解析器对于那些常见的任务是不是矫枉过正,在所有的例子。
$dom = new DOMDocument();
$dom->loadHTML($html);
// loop on every links
foreach($dom->getElementsByTagName('a') as $link) {
// get href attribute
$href = $link->getAttribute('href');
// do whatever you want with them...
}
我希望这有助于某种程度。
你甚至不必在CDATA及其同类中使用那些令人讨厌的理由来提出一个令人信服的理由,不要在HTML上使用正则表达式。 – Borealid 2011-03-10 01:10:57
html评论是一个很好的例子,但你的古怪的类是我认为无效的HTML。 – Endophage 2011-03-10 05:42:57
@Endophage - 如果您怀疑我的有效性声明,可以在此处查看:http://validator.w3.org/#validate_by_input。只需复制并粘贴示例,然后单击“检查”按钮。 – Alohci 2011-03-10 09:00:51