我有這個字符串:爲什麼匹配在這個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它的工作原理。
我有這個字符串:爲什麼匹配在這個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它的工作原理。
這不回答這個問題。 – sawa
@sawa是對的。您需要添加一個句子(或者一個句子'..match,其中只有...'),並且請大寫句子的第一個單詞。 。 –
ciabon,如果您要使用百分比計算中,'str.scan(?/ \ d +(= \ s +%)/)地圖(:to_i)#=> [60,40]'可能會更好。 '(?= \ s +%)'是*正面預測*。必須有一個匹配,但它不被視爲返回匹配的一部分。事實上,如果沒有其他的數字,'str.scan(/ \ d + /)的地圖。(&:to_i)#=> [60,40]'就足夠了。 –
它是由設計的陣列。 match
找到第一個匹配項。
這不利於實現預期的結果:'我想提取2個percentage'。 –
@NicNilov這不是問題。不要欺騙。不要改變問題。你不是OP。 – sawa
我提供了原始消息的確切引用,所以你知道我在說什麼。我編輯了這個問題的標題以更好地反映它的性質。在我看來,這比迂腐但無用的回覆更有幫助。考慮這個常識,而不是作弊。 –
你需要爲你的正則表達式設置'g'(全局)標誌:[http://www.w3schools.com/jsref/jsref_regexp_g.asp](http://www.w3schools.com/jsref/jsref_regexp_g。 ASP) – Valijon
http://stackoverflow.com/questions/7993662/whats-the-difference-between-scan-and-match-on-ruby-string – Nimir
@Valijon,紅寶石是不會得到任何'/ g'選項,只是'/ i','/ m','/ x'和'/ o'。 –