2011-06-13 68 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(/\[\[([^\]])+\]\]/);