3

ハイフンで区切られた文字列の両側を抽出しようとしています

abc - def

現時点で私が持っている

([^-]*)-([^-]*)

マッチ 1 は になりabc、マッチ 2 は になりますdef

繰り返し要素がないように、この正規表現をよりエレガントに書く方法はありますか? つまり([^-]*)、2 回繰り返されません。

4

5 に答える 5

1

非貪欲な一致を使用します。

(.*?)-(.*)

動作を示すライブ デモをご覧ください。

これ以上簡単にはできないと思います。

于 2013-09-04T12:50:50.923 に答える
0

だけでマッチできますが(.*)-(.*)、ハイフンは引き続きマッチする必要があるため、2 つの式が分割されます。ちなみに、次のようなサイトでオンラインでチェックしてみることができます - http://regexpal.com/

于 2013-09-04T12:54:12.600 に答える
0

正規表現がより複雑な場合は、それを小さなチャンクに分割してから再利用できます。

あなたの例では、これは次のようになります(Java):

String side = "([^-]*)";
String regex = side + "-" + side;

ただし、これは繰り返される複雑な正規表現(電子メールの検証などを考えてください)には役立ちますが、あなたの場合、繰り返しのあるバージョンは完全に問題ありません。

を使用して以前のグループで一致したものを参照できますが([^-]*)-\1、これは 2 つの辺が等しい"abc-abc"場合にのみ一致し、同じパターンに一致する場合は一致しません。つまり、一致するが、一致しない場合"abc-def"です。

于 2013-09-04T13:13:03.117 に答える
0

次のように実行できます。

(?:[^-]*-?){2}

正規表現 101 デモ

于 2013-09-04T13:16:32.627 に答える