可能重复:
RegEx match open tags except XHTML self-contained tags
我在rubular.com中测试了我的正则表达式并且它可以工作,但是当我运行代码时,它的行为却不同。
我想从一些HTML代码中解析整个段落
这是我的正则表达式
description = ad_page.body.scan(/(?<=<span id="preview-local-desc">).+(?=<\/span>)/m)
以下是一些HTML源代码
<span id="preview-local-desc"> I want to pick up everything typed here.
Paragraphs, everything.
</span>
匹配从我需要的地方开始,然后它一直保持匹配到文档的末尾。
答案 0 :(得分:4)
除了you shouldn't parse HTML with regex之外,你还需要非贪婪的匹配:
/(?<=<span id="preview-local-desc">).+?(?=<\/span>)/m
答案 1 :(得分:0)
如果您拥有或控制文件的格式,使用正则表达式解析XML或HTML对于简单的任务来说是可以接受的。如果不这样做,那么对文件的简单更改可能会破坏正则表达式。
使用解析器可以避免这个问题;我用Nokogiri解析了一些可怕的XML,它甚至没有注意到。在编写了一个处理1000多个feed的RSS聚合器后,我迷上了使用解析器。
require 'nokogiri'
html = '<span id="preview-local-desc"> I want to pick up everything typed here.
Paragraphs, everything.
</span>'
doc = Nokogiri.HTML(html)
doc.at('span').text
# => " I want to pick up everything typed here.\n Paragraphs, everything.\n "
如果您想要多个<span>
代码:
doc.search('span').map(&:text)
# => [" I want to pick up everything typed here.\n Paragraphs, everything.\n "]
如果有多个<span>
代码,而您只需要这个代码:
doc.at('span#preview-local-desc').text
# => " I want to pick up everything typed here.\n Paragraphs, everything.\n "