1

2 つの名前付き部分とオプションのハイフン区切りを持つ正規表現があります。

^(?<Left>xxx)-?(?<Right>yyy)$
(実際の正規表現を簡略化しました。'xxx' と 'yyy' の代わりに、2 つの非常に長く複雑な正規表現を想像してください。)

ただし、ハイフンはオプションであるため、暗黙のセパレーターを別の場所に追加できる入力文字列があります。Left または Right が入力文字列の大部分を占める必要があると言って、あいまいさを解決できる方法はありますか?

たとえば、「ABC」/「DEF」または「ABCDE」/「F」のいずれかに分割できる入力「ABCDEF」の場合、両方とも 2 つのサブ正規表現の有効な一致です。「右」に有効な残りが残っている限り、「左」に最大のチャンクを取りたいので、2番目の分割を好むとします。

私は .NET の正規表現ライブラリを使用していますが、標準的な手法があることを願っています。

4

1 に答える 1

2

正規表現にあいまいさはありません。設計どおりに一致します。

各正規表現内の量指定子の一致動作を変更して、結果を変更できます。

デフォルトでは、それらはすべて貪欲です。この一致の動作を可能な限り変更して、量指定子の後に疑問符を追加することで、一致をできるだけ少なくすることができ.+?ます。

\(.*\)一致します

(a)b(c)
^^^^^^^

一致\(.*?\)する

(a)b(c)
^^^ 
于 2012-02-22T11:12:25.590 に答える