ハイフンで区切られた文字列の両側を抽出しようとしています
abc - def
現時点で私が持っている
([^-]*)-([^-]*)
マッチ 1 は になりabc
、マッチ 2 は になりますdef
。
繰り返し要素がないように、この正規表現をよりエレガントに書く方法はありますか? つまり([^-]*)
、2 回繰り返されません。
ハイフンで区切られた文字列の両側を抽出しようとしています
abc - def
現時点で私が持っている
([^-]*)-([^-]*)
マッチ 1 は になりabc
、マッチ 2 は になりますdef
。
繰り返し要素がないように、この正規表現をよりエレガントに書く方法はありますか? つまり([^-]*)
、2 回繰り返されません。
だけでマッチできますが(.*)-(.*)
、ハイフンは引き続きマッチする必要があるため、2 つの式が分割されます。ちなみに、次のようなサイトでオンラインでチェックしてみることができます - http://regexpal.com/
正規表現がより複雑な場合は、それを小さなチャンクに分割してから再利用できます。
あなたの例では、これは次のようになります(Java):
String side = "([^-]*)";
String regex = side + "-" + side;
ただし、これは繰り返される複雑な正規表現(電子メールの検証などを考えてください)には役立ちますが、あなたの場合、繰り返しのあるバージョンは完全に問題ありません。
を使用して以前のグループで一致したものを参照できますが([^-]*)-\1
、これは 2 つの辺が等しい"abc-abc"
場合にのみ一致し、同じパターンに一致する場合は一致しません。つまり、一致するが、一致しない場合"abc-def"
です。