(..|. .. .|..)
演算子 - 左から右、右から左、または何か他のものの式の優先順位は何ですか?正規表現演算子の順番(.. | .. ... .. |)
11
A
答えて
12
左から右へ、最初の選択肢は「勝利」と一致し、他のものはチェックされません。これは典型的なNFA正規表現の動作です。その動作の良い説明はregular-expressions.info Alternation pageにあります。
RegexOptions.RightToLeft
は、正規表現エンジンが入力文字列を右から左へと調べるだけで、正規表現エンジンがパターン自体をどのように処理するかには影響しません。
私が説明しましょう:a
代替がbbb
後に表示されるので、あなたが(aaa|bb|a)
正規表現を持っているとRegex.Match
を使用してbbac
で試合を見つけるしようとした場合、あなたが取得する値はbb
です。 Regex.Matches
を使用すると、すべての一致が得られ、bb
とa
の両方が結果になります。
また、正規表現パターンを左から右に調べると、アンカーされていない代替グループ内にがあることがわかります。代替の順番はです。あなたはabbccaa
照合する(a|aa|aaa)
正規表現を使用する場合は、最初のa
選択肢は文字列の各a
を(regex demoを参照)に一致します。単語境界を追加したら、任意の順序で代替語を配置できます(one more regex demo参照)。
関連する問題
私は、ここでは最初のものの代わりに、最も長いマッチを常にとる正規表現エンジンがあると思います。 – Joey
POSIX準拠の正規表現エンジンは、最も長いマッチを必要とします。また、Perl6 '/ pattern1 | pattern2/'は最も長い選択肢にもマッチします(' || '演算子があり、他のほとんどのフレーバーでは単純な' | 'として機能し、最初に見つかった代替物を生成します)。 –