2011-06-13 64 views
4

我有一个正则表达式\[\[(.+)\]\]。我用它来捕获像hey I [[am]] so awesome(捕获am)wikilinks。我怎么能修改这个,以便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]].

回答

10

你需要做.+非贪婪:

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

看到这个参考:ruby regexen

+0

我可以发誓我曾试过。作为参考,使用术语“懒惰”是不是很常见?不管怎么说,还是要谢谢你! – Kudu 2011-06-13 15:24:26

+0

不适用于正则表达式(我知道)。它贪婪而不贪婪。懒惰更多的是“后来”(或永远不会)评估的事情,而不是现场他们被宣布/首先提及的事情。 – Mat 2011-06-13 15:25:51

+0

Kudu,懒惰或不贪婪。它们都是正确和描述性的。 – zellio 2011-06-13 15:26:07

5

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

4

字符串的scan运营商应该努力捕捉所有你正在寻找的正则表达式是/\[\[([^\]])+\]\]/[\]]+是关键。那将匹配到第一个]并停止。

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