【问题标题】:Extracting all of html image tag, Rails提取所有html图像标签,Rails
【发布时间】:2012-09-21 10:03:16
【问题描述】:

下午好,

我正在尝试编写一个脚本,该脚本将通过其<img src=""/> 标签从文章中提取第一张图片。所以如果一篇文章有​​:

<p>Lorem ipsum dolor sit amet, labore et dolore magna aliqua.<img src="example.jpg"/> Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</p>

我想提取整个图片标签,&lt;img src="example.jpg"/&gt;.

我发现这个正则表达式只提取图像的位置:

content_to_extract_from[/img.*?src="(.*?)"/i,1]

产生,“example.jpg”。

有谁知道也可以捕获标签的正则表达式?

提前致谢,安迪

【问题讨论】:

  • your_html[ /\&lt;img.*?src="(.*?)"\/\&gt;/ ] 这个怎么样?
  • 不要使用正则表达式,使用 nokogiri 之类的解析器

标签: html ruby-on-rails ruby regex image


【解决方案1】:

使用正则表达式解析标记是自找麻烦。你可能会写一些最有效的东西,但在你没有预见到的情况下会中断。例如,您可以用单引号而不是双引号将属性括起来,您的正则表达式将无法处理

更可靠的是使用真正的解析器,例如 nokogiri

html = Nokogiri::HTML.fragment('<p>Lorem ipsum dolor sit amet, labore et dolore magna aliqua.<img src="example.jpg"/> Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</p>')
html.css('img').collect(&:to_s) #=> ["<img src=\"example.jpg\">"] 

【讨论】:

  • 哦,这很酷,为什么正则表达式在这样的领域不受欢迎?感谢 nokogiri 的提示真棒!
  • 纯字符串处理是事情,这里不赞成。 ML 是结构良好的语言,因此允许对内容进行高级访问。这是你应该利用的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-10
  • 2012-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-31
相关资源
最近更新 更多