有问题的正则表达式是
/(<iframe.*?><\/iframe>)/
我正在使用这个ruby正则表达式来匹配字符串的各个部分,然后创建一个结果数组。
字符串是
"<p><iframe src=\"http://www.dailymotion.com/embed/video/k18WBkRTMldXzB7JYW5?logo=0&info=0\" frameborder=\"0\" height=\"450\" width=\"580\"></iframe></p>\n<p>#1<br />\n<iframe src=\"https://www.cloudy.ec/embed.php?id=cabe5d3ba31da\" allowfullscreen=\"\" frameborder=\"0\" height=\"420\" width=\"640\"></iframe></p>\n<p>#2<br />\n<iframe src=\"https://www.cloudy.ec/embed.php?id=b03d31e4b5663\" allowfullscreen=\"\" frameborder=\"0\" height=\"420\" width=\"640\"></iframe></p>\n<p>#3<br />\n<iframe src=\"https://www.cloudy.ec/embed.php?id=f63895add1aac\" allowfullscreen=\"\" frameborder=\"0\" height=\"420\" width=\"640\"></iframe></p>\n"
我正在调用正则表达式.match()
就像这样
/(<iframe.*?><\/iframe>)/.match(entry.content).to_a
结果是第一场比赛的重复
["<iframe src=\"http://www.dailymotion.com/embed/video/k18WBkRTMldXzB7JYW5?logo=0&info=0\" frameborder=\"0\" height=\"450\" width=\"580\"></iframe>", "<iframe src=\"http://www.dailymotion.com/embed/video/k18WBkRTMldXzB7JYW5?logo=0&info=0\" frameborder=\"0\" height=\"450\" width=\"580\"></iframe>"]
我使用了Rubular,我能够让Regex在那里工作http://rubular.com/r/CYF0vgQtrX
答案 0 :(得分:2)
结果是第一场比赛的重复
即使Regex #matre()的文档做了一个描述match()操作的糟糕工作,它实际上找到第一个匹配:
str = "abc"
md = /./.match(str)
p md.to_a
--output:--
["a"]
当匹配时,Regexp.match()返回MatchData对象。 MatchData对象包含整个匹配和每个组的匹配项。如果在MatchData对象上调用to_a(),则返回值是一个包含整个匹配的数组,以及正则表达式中每个组匹配的任何内容:
str = "abc"
md = /(.)(.)(.)/.match(str)
p md.to_a
--output:--
["abc", "a", "b", "c"]
由于您在正则表达式中指定了一个组,因此一个结果是整个匹配,另一个结果是与您的组匹配的结果。
[正则表达式]是我想到的第一种方法。如果这不是 工作,然后我打算使用nokogiri
从现在开始,nokogiri应该是你的第一个想法...因为:
如果您遇到编程问题,并且您认为,&#34;我将使用正则表达式&#34;, 现在你有两个问题&#34;。
答案 1 :(得分:1)
您应该在这里使用scan
代替match
。
entry.content.scan(/<iframe.*?><\/iframe>/)
使用/(<iframe.*?><\/iframe>)/
将得到一个二维数组。该文件说:
如果模式包含组,则每个单独的结果本身就是一个包含每个组一个条目的数组。