2016-01-02 15 views
0

我有這個字符串:爲什麼匹配在這個ruby regexp中只能找到1個組?

str = "\r\n <span>60 %</span>\r\n <br>\r\n40 %" 

我要提取的2個,所以我寫了這個:

str.match(/(\d{1,2}\s%)/)

但它只返回第一個,不明白爲什麼:

=> #<MatchData "60 %" 1:"60 %">

如果我嘗試這rubular它的工作原理。

rubular version

+0

你需要爲你的正則表達式設置'g'(全局)標誌:[http://www.w3schools.com/jsref/jsref_regexp_g.asp](http://www.w3schools.com/jsref/jsref_regexp_g。 ASP) – Valijon

+0

http://stackoverflow.com/questions/7993662/whats-the-difference-between-scan-and-match-on-ruby-string – Nimir

+1

@Valijon,紅寶石是不會得到任何'/ g'選項,只是'/ i','/ m','/ x'和'/ o'。 –

回答

2

代替match,只將找到的第一個匹配使用scan

str.scan(/(\d{1,2}\s%)/) 

會產生匹配

["60 %", "40 %"] 
+1

這不回答這個問題。 – sawa

+1

@sawa是對的。您需要添加一個句子(或者一個句子'..match,其中只有...'),並且請大寫句子的第一個單詞。 。 –

+1

ciabon,如果您要使用百分比計算中,'str.scan(?/ \ d +(= \ s +%)/)地圖(:to_i)#=> [60,40]'可能會更好。 '(?= \ s +%)'是*正面預測*。必須有一個匹配,但它不被視爲返回匹配的一部分。事實上,如果沒有其他的數字,'str.scan(/ \ d + /)的地圖。(&:to_i)#=> [60,40]'就足夠了。 –

0

它是由設計的陣列。 match找到第一個匹配項。

+0

這不利於實現預期的結果:'我想提取2個percentage'。 –

+1

@NicNilov這不是問題。不要欺騙。不要改變問題。你不是OP。 – sawa

+0

我提供了原始消息的確切引用,所以你知道我在說什麼。我編輯了這個問題的標題以更好地反映它的性質。在我看來,這比迂腐但無用的回覆更有幫助。考慮這個常識,而不是作弊。 –

相關問題