2012-07-20 77 views
1

我一直試圖在文檔中找到類似的內容,但失敗了。我想要的是遍歷字符串中的正則表達式匹配,並將MatchData傳遞給該塊。尋找正則表達式#match_all

  • 還有Regexp#match,但它只發現一個匹配;
  • String#scan,但該塊僅接收捕獲陣列或匹配串,不飽滿MatchData。由於你失去了命名的捕獲能力,這特別吸引Oniguruma。
  • 還有Regexp::last_match,所以我可以真的去了scan路線,但似乎醜陋和不雅。

我這麼想嗎?

回答

0

是的,你錯過了一些東西。從MatchData文檔:

MatchData是特殊變量$〜類型,並且是由 正則表達式匹配#和Regexp.last_match返回的對象類型。它 封裝模式匹配的所有結果,結果通常 通過特殊變量$ &,$',$`,$ 1,$ 2等訪問。

最重要的一點是大膽的。

你已經有ALL單一MatchData對象匹配。這不是你想要的嗎?

+1

否 - 您在MatchData中擁有所有單個匹配的捕獲。如果你有多個匹配,你需要多個'MatchData'對象。 – Amadan 2012-07-20 01:27:40

+0

我覺得這個問題有正確的答案,那麼: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

+0

這是一個可行的答案,但我不會說這是一個正確的答案(來自Ruby,而不是來自i-blis)。我愛Ruby,但這裏是一個疣。 – Amadan 2012-07-20 01:33:19