Regex(Ruby)捕获对象名称和id号

时间:2014-09-25 04:00:18

标签: html ruby regex

例如,我有两个潜在的标记:

<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&amp;buy_btn=0&amp;autoplay=0" width="960" height="540" class="responsive-embed"></iframe>

我希望使用Ruby匹配,无论是video还是package还是:id

非常感谢任何帮助!

5 个答案:

答案 0 :(得分:3)

^.*?\/(?=packages|videos).*?\/(\d+)

试试这个。看演示。

http://regex101.com/r/qC9cH4/1

答案 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&amp;buy_btn=0&amp;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+

DEMO

OR

如果你不想匹配id,那么使用它,

<iframe src="https?:\/\/[^\s]*?\/\K(?:videos|packages)

DEMO

OR

这将在两个不同的组中捕获两者。

<iframe src="https?:\/\/[^\s]*?\/\K(videos|packages)\/(\d+)

DEMO

答案 3 :(得分:0)

使用XML解析器后才使用正则表达式。否则https://stackoverflow.com/a/1732454/1916721

获得src属性后,您可以使用此快速正则表达式解析链接:

https?:\/\/embed\.app\.com\/((?:packages)|(?:videos))\/([0-9]+)

然后,您将在第一个捕获组中获得packagesvideos(您可以根据需要修剪s。在第二个捕获组中,您将获得{{1} }}

有关示例,请参阅此处:http://regex101.com/r/uF4bI1/2

答案 4 :(得分:0)

在ruby中,Regex是

/iframe src="http:\/\/[^\/]+\/[packages|videos]+\/([^"]+)"/