【发布时间】:2011-10-05 17:38:00
【问题描述】:
我正在尝试使用 Ruby 检索网页的每个外部链接。我在这个正则表达式中使用String.scan:
/href="https?:[^"]*|href='https?:[^']*/i
然后,我可以使用 gsub 删除 href 部分:
str.gsub(/href=['"]/)
这很好用,但我不确定它在性能方面是否有效。这可以使用还是我应该使用更具体的解析器(例如 nokogiri)?哪种方式更好?
谢谢!
【问题讨论】:
-
请不要尝试用正则表达式解析 HTML,HTML 解析器会更好地为您服务。
-
因为 HTML 解析比您想象的要复杂,而且有很多简单的正则表达式无法处理的损坏的 HTML:stackoverflow.com/questions/4231382/…
-
实际上,在这种简单的情况下,我希望正则表达式解决方案比解析解决方案更健壮。不过,我会将 [^"] 替换为 [^" >]。我也希望它会快一点。但这有点取决于目标。如果这在一个必须工作多年的生产系统中使用,我会选择一个解析器,如果它是一个供自己使用的脚本,肯定是正则表达式。
-
在所有情况下,我都希望一个简单的解析解决方案比一个简单的正则表达式解决方案更健壮。 :)
-
@markijbema,我们在 HTML 中经常看到的非人为问题是
=处的空格,或者缺少单引号,或者使用双引号。即使在一个创建者的单个文档中,这些事情也经常发生。可以编写更复杂的正则表达式来处理它,但是解析器会毫无问题地完成它。
标签: ruby regex string nokogiri