Ruby正则表达式:如果子串不存在则匹配

时间:2012-10-22 18:35:08

标签: ruby regex

我在尝试捕获字符串上的组时遇到问题:

"type=gist\nYou need to gist this though\nbecause its awesome\nright now\n</code></p>\n\n<script src=\"https://gist.github.com/3931634.js\"> </script>\n\n\n<p><code>Not code</code></p>\n"

我的正则表达式目前看起来像这样:

/<code>([\s\S]*)<\/code>/

我的目标是让代码括号之间的所有内容。不幸的是,它匹配到第二个结束代码括号是否有办法匹配代码括号内的所有内容,直到第一次出现结束代码括号?

2 个答案:

答案 0 :(得分:4)

默认情况下,正则表达式中的所有重复量词都是贪婪的(匹配尽可能多的字符)。使*不合适,如下:

/<code>([\s\S]*?)<\/code>/

考虑使用DOM解析器。正则表达式不是解析HTML的正确工具。

答案 1 :(得分:0)

我刚刚学会了通过多个部分,

String.scan( /<code>(.*?)<\/code>/ ){
  puts $1
}

是一种非常好的方式来解决所有代码的问题 - 但是,是的,获得一个合适的解析器会更好......