1

ドキュメントでこのようなものを見つけようとしましたが、失敗しました。私が欲しいのは、文字列内の正規表現の一致を繰り返し処理しMatchData、ブロックに渡すことです。

  • ありますがRegexp#match、一致するものは1つだけです。
  • がありますString#scanが、ブロックはキャプチャ配列または一致文字列のみを受け取り、完全ではありませんMatchData。名前付きのキャプチャ機能が失われるため、これは特に鬼車に悪影響を及ぼします。
  • Regexp::last_matchあるので、実際に行くことができましscanたが、醜くて上品ではないようです。

私は何かが足りないのですか?

4

2 に答える 2

2

String#scanのような関数がありますが、MatchDataの配列を返しますか?を参照してください

String#scanとを使用するのが最善の策のようRegexp.last_matchです。

于 2012-07-20T01:26:13.690 に答える
0

はい、何かが足りません。MatchDataのドキュメントから:

MatchDataは、特殊変数$〜のタイプであり、Regexp#matchおよびRegexp.last_matchによって返されるオブジェクトのタイプです。これは、パターンマッチのすべての結果、通常は特別な変数$&、$'、$ `、$ 1、$2などを介してアクセスされる結果をカプセル化します。

重要な部分は太字で示されています。

単一のMatchDataオブジェクトにすでにすべての一致があります。それはあなたが望むものではありませんか?

于 2012-07-20T01:26:25.347 に答える