対スキャンルビー(1.9.3)のドキュメントには、そのスキャンを意味すると思わ=〜は最初のオカレンスだけを返し、一方でそのルビー正規表現は=〜
- スキャンは、複数の一致を返すことを除いて=〜と同等です
- スキャンは一致データを返しますが、=〜はインデックスを返します。
ただし、次の例では、2つのメソッドが同じ文字列と式に対して異なる結果を返すようです。何故ですか?
1.9.3p0 :002 > str = "Perl and Python - the two languages"
=> "Perl and Python - the two languages"
1.9.3p0 :008 > exp = /P(erl|ython)/
=> /P(erl|ython)/
1.9.3p0 :009 > str =~ exp
=> 0
1.9.3p0 :010 > str.scan exp
=> [["erl"], ["ython"]]
最初の試合のインデックスが0である場合は、代わりに「ERL」と「パイソン」の復帰「のPerl」および「パイソン」をスキャンするべきではないのですか?
おかげ捕捉基なしで正規表現を与え
ありがとうございますので、スキャンは厳密に=〜と等価ではありません。 – Anand
@Anandスキャンは〜〜とはまったく異なる何かを返すので、私はそれが同等であると言うことは決して正確ではないと思います。スキャンによって返される最初の結果は、 'exp'にキャプチャグループが含まれていない場合にのみインデックス' str =〜exp'で始まる部分文字列になります。それに加えて、最初の結果は 'regexp.last_match.string'と同等であると言うことができます。' regexp.last_match.string'は、キャプチャグループが含まれていない場合は 'str =〜exp'を実行した後に取得し、キャプチャグループを含まない場合は' Regexp.last_match.captures'キャプチャグループを含んでいます。 – sepp2k
あなたが実際に学ぶことができるこの種の投稿を見ることはうれしいです。 – texasbruce