2016-02-24 16 views

答えて

12

左から右へ、最初の選択肢は「勝利」と一致し、他のものはチェックされません。これは典型的なNFA正規表現の動作です。その動作の良い説明はregular-expressions.info Alternation pageにあります。

RegexOptions.RightToLeftは、正規表現エンジンが入力文字列を右から左へと調べるだけで、正規表現エンジンがパターン自体をどのように処理するかには影響しません。

私が説明しましょう:a代替がbbb後に表示されるので、あなたが(aaa|bb|a)正規表現を持っているとRegex.Matchを使用してbbacで試合を見つけるしようとした場合、あなたが取得する値はbbです。 Regex.Matchesを使用すると、すべての一致が得られ、bbaの両方が結果になります。

また、正規表現パターンを左から右に調べると、アンカーされていない代替グループ内にがあることがわかります。代替の順番はです。あなたはabbccaa照合する(a|aa|aaa)正規表現を使用する場合は、最初のa選択肢は文字列の各aを(regex demoを参照)に一致します。単語境界を追加したら、任意の順序で代替語を配置できます(one more regex demo参照)。

+0

私は、ここでは最初のものの代わりに、最も長いマッチを常にとる正規表現エンジンがあると思います。 – Joey

+2

POSIX準拠の正規表現エンジンは、最も長いマッチを必要とします。また、Perl6 '/ pattern1 | pattern2/'は最も長い選択肢にもマッチします(' || '演算子があり、他のほとんどのフレーバーでは単純な' | 'として機能し、最初に見つかった代替物を生成します)。 –