例如,我有两个潜在的标记:
<iframe src="http://embed.app.com/packages/495" width="850" height="480" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>
<iframe src="https://embed.app.com/videos/10332?hide_text=1&buy_btn=0&autoplay=0" width="960" height="540" class="responsive-embed"></iframe>
我希望使用Ruby匹配,无论是video
还是package
还是:id
号
非常感谢任何帮助!
答案 0 :(得分:3)
答案 1 :(得分:2)
使用nokogiri查找iframe标记中的src属性和提取信息的模式的示例:
require 'nokogiri'
html_doc = <<EOD
<iframe src="http://embed.app.com/packages/495" width="850" height="480" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>
<iframe src="https://embed.app.com/videos/10332?hide_text=1&buy_btn=0&autoplay=0" width="960" height="540" class="responsive-embed"></iframe>
EOD
puts "Type ID\n----------------------"
doc = Nokogiri::HTML.parse(html_doc)
srcList = doc.xpath('//iframe/@src')
srcList.each do |src|
if ( m = src.to_s.match(/\/(?<type>packages|videos)\/(?<id>[0-9]+)/) )
printf("%-12s %s\n",m[:type], m[:id])
end
end
答案 2 :(得分:2)
Ruby 2.0支持\K
。所以你可以使用下面的正则表达式,
<iframe src="https?:\/\/[^\s]*?\/\K(?:videos|packages)\/\d+
OR
如果你不想匹配id,那么使用它,
<iframe src="https?:\/\/[^\s]*?\/\K(?:videos|packages)
OR
这将在两个不同的组中捕获两者。
<iframe src="https?:\/\/[^\s]*?\/\K(videos|packages)\/(\d+)
答案 3 :(得分:0)
使用XML解析器后才使用正则表达式。否则https://stackoverflow.com/a/1732454/1916721。
获得src属性后,您可以使用此快速正则表达式解析链接:
https?:\/\/embed\.app\.com\/((?:packages)|(?:videos))\/([0-9]+)
然后,您将在第一个捕获组中获得packages
或videos
(您可以根据需要修剪s
。在第二个捕获组中,您将获得{{1} }}
有关示例,请参阅此处:http://regex101.com/r/uF4bI1/2
答案 4 :(得分:0)
在ruby中,Regex是
/iframe src="http:\/\/[^\/]+\/[packages|videos]+\/([^"]+)"/