2013-08-01 35 views
2

我正在使用Ruby 2.0。我目前得到的字符串:在掃描或正則表達式模式中提取Ruby字符串

str = "bar [baz] foo [with] another [one]" 

str.scan(/\[.*\]/) 

輸出是:

["[baz] foo [with] another [one]"] 

當我希望它更像是:

["[baz]","[with]","[one]"] 

所以我基本上需要把之間的一切「[]」到數組中。有人可以告訴我我錯過了什麼嗎?

+1

'str.scan(/\[.*?\]/)#=> [「[baz]」,「[with]」,「[one]」 ]' – mdesantis

回答

4

您的.*是貪婪的,所以它不會停止,直到最後的括號。

你需要使用一個懶惰量詞.*?或只能望塵莫及非括號:[^\]]*

2

Regexs是由默認的貪婪讓你的正則表達式從第一抓住一切[最後]。使其不像以下那樣貪婪:

str.scan(/\[.*?\]/) 
+0

這一個完美謝謝 - 與布賴恩的答案相同的結論 – Ryan