特定のオプションが設定されているかどうかをテストするために、JAVA 正規表現を作成しようとしています。現時点[ks]?[zx]?[ap]?
では、k、s、またはなし、次に z、x、またはなし、最後に a、p、またはなしのいずれかです。
この正規表現の唯一の問題は、この 1 つの順序でしか機能しないことですが、すべての順序で機能kza
するはずです。azk
zka
kaz
akz
zak
自分を鍛えてください - この答えは正規表現を書き込み専用言語として強化します!
^(([ks](?!.*[ks]))|([zx](?!.*[zx]))|([ap](?!.*[ap]))){0,3}$
複数行の文字列にGroovy(またはJava 7)を使用している場合、これは次のようにより明確に記述できます。
^(?x:
( ( [ks] (?!.*[ks]) )
| ( [zx] (?!.*[zx]) )
| ( [ap] (?!.*[ap]) )
) {0,3}
)$
このバージョンは、そのグループが文字列の後のどこかに現れない場合にのみ、各グループに一致します。これは「ゼロ幅、先読みアサーション」です。
理解できたら、'?' を置き換えます。「パイプ」で:試してください:"[ks]|[zx]|[ap]"