捕获正则表达式重复

时间:2011-06-13 15:14:28

标签: ruby regex

我有正则表达式\[\[(.+)\]\]。我用它来捕获像hey I [[am]] so awesome这样的wikilink(捕获am)。我如何修改此设置,以便hey I [[am]] more [[awesome]] than you think分别同时生成amawesome?我的尝试产生了像am]] more [[awesome这样的单个字符串。一点上下文:我用这个来编写一个Ruby IRC bot。

P.S。 Wikilinks也可以是多字的,如hey I am much [[more awesome]] than you [[probably think]].

3 个答案:

答案 0 :(得分:10)

你需要让.+非贪婪:

\[\[(.+?)\]\]

请参阅此参考:ruby regexen

答案 1 :(得分:5)

您可以使用非贪婪版本,例如\[\[(.+?)\]\](请注意问号)。

答案 2 :(得分:4)

字符串的scan运算符应该能够捕获正在查找的正则表达式的所有内容/\[\[([^\]])+\]\]/ [\]]+是关键字。这将匹配到第一个]并停止。

string.scan( /\[\[([^\]])+\]\]/ );