0

私はドキュメントGroupinggroupingから Regexのトピックを読んでいました。そこに 1 つの例が見つかり、 inの動作/役割を理解するためにそれを使い始めました。コードは、以下のようにそれを強調するために使用されます。?<option>:Regex

%w{CASE case CAse caSE cASe casE}­.grep /(?i:­ca)se/
# => ["case", "CAse"] 
%w{CASE case CAse caSE cASe casE}­.grep /(?:c­a)se/
# => ["case"]
%w{CASE case CAse caSE cASe casE}­.grep /(:ca­)se/
# => []
%w{CASE case CAse caSE cASe casE}­.grep /(i:c­a)se/
# => []

今、私は、、、、によって実行される操作について完全に混乱して(?i:­caいます。出力ごとに各構文は有効です。そうしないと、コンソールからエラーが発生する可能性があります。(?:c­a)se(:ca­)(i:c­a)

?<option>:上記のコードによって出力がどのように生成されたか、および の特別な役割が何であるかを理解するのを手伝ってくれませんgrouping of Regexか?

4

1 に答える 1

1
> %w{CASE case CAse caSE cASe casE}­.grep /(?i:­ca)se/
=> ["case", "CAse"] 

(?<option>:pattern)大文字と小文字を区別しないフラグがオンの非キャプチャ グループi。パターンはca. 大文字と小文字を区別しないフラグは、非キャプチャ グループ内でのみ有効であるため、ca大文字と小文字を区別しないで一致し、大文字と小文字を区別しseて一致します。これは、正規表現の一部に対してのみ特定の効果を有効にするための便利な構造です。

after(pattern)で始まらないキャプチャ グループとは対照的に、非キャプチャ グループはグループ内のパターンに一致するテキストの位置を保存しません。?(

> %w{CASE case CAse caSE cASe casE}­.grep /(?:c­a)se/
=> ["case"]

これは、オプションのない単純な非キャプチャ グループでありca、パターンとして使用されます。ドキュメントで説明されているように、<option>in(?<option>:pattern)は空にすることができます。ここには特別なことは何もありません。大文字と小文字を区別して一致させるだけです。

> %w{CASE case CAse caSE cASe casE}­.grep /(:ca­)se/
=> []

:caこれは、パターン (コロン:cその後)を持つキャプチャ グループaです。もちろん、一致するものは見つかりませんでした。

> %w{CASE case CAse caSE cASe casE}­.grep /(i:c­a)se/
=> []

繰り返しますが、i:caパターンとして ( i, コロン:, c, then a) を使用したキャプチャ グループです。一致も見つかりませんでした。

于 2013-01-17T15:43:07.163 に答える