我一直試圖在文檔中找到類似的內容,但失敗了。我想要的是遍歷字符串中的正則表達式匹配,並將MatchData
傳遞給該塊。尋找正則表達式#match_all
- 還有
Regexp#match
,但它只發現一個匹配; - 有
String#scan
,但該塊僅接收捕獲陣列或匹配串,不飽滿MatchData
。由於你失去了命名的捕獲能力,這特別吸引Oniguruma。 - 還有
Regexp::last_match
,所以我可以真的去了scan
路線,但似乎醜陋和不雅。
我這麼想嗎?
我一直試圖在文檔中找到類似的內容,但失敗了。我想要的是遍歷字符串中的正則表達式匹配,並將MatchData
傳遞給該塊。尋找正則表達式#match_all
Regexp#match
,但它只發現一個匹配;String#scan
,但該塊僅接收捕獲陣列或匹配串,不飽滿MatchData
。由於你失去了命名的捕獲能力,這特別吸引Oniguruma。Regexp::last_match
,所以我可以真的去了scan
路線,但似乎醜陋和不雅。我這麼想嗎?
見Is there a function like String#scan, but returning array of MatchDatas?
它看起來像你最好的選擇是使用String#scan
和Regexp.last_match
。
是的,你錯過了一些東西。從MatchData文檔:
MatchData是特殊變量$〜類型,並且是由 正則表達式匹配#和Regexp.last_match返回的對象類型。它 封裝模式匹配的所有結果,結果通常 通過特殊變量$ &,$',$`,$ 1,$ 2等訪問。
最重要的一點是大膽的。
你已經有ALL單一MatchData對象匹配。這不是你想要的嗎?
否 - 您在MatchData中擁有所有單個匹配的捕獲。如果你有多個匹配,你需要多個'MatchData'對象。 – Amadan 2012-07-20 01:27:40
我覺得這個問題有正確的答案,那麼:http://stackoverflow.com/questions/6804557/how-do-i-get-the-match-data-for-all-occurrences-of-a-ruby-regular -expression-in – Strelok 2012-07-20 01:29:07
這是一個可行的答案,但我不會說這是一個正確的答案(來自Ruby,而不是來自i-blis)。我愛Ruby,但這裏是一個疣。 – Amadan 2012-07-20 01:33:19
是的,我擔心這將是答案。不雅,尤其是考慮到單場比賽不需要猴子生意。 – Amadan 2012-07-20 01:28:45