4

特定のオプションが設定されているかどうかをテストするために、JAVA 正規表現を作成しようとしています。現時点[ks]?[zx]?[ap]?では、k、s、またはなし、次に z、x、またはなし、最後に a、p、またはなしのいずれかです。

この正規表現の唯一の問題は、この 1 つの順序でしか機能しないことですが、すべての順序で機能kzaするはずです。azkzkakazakzzak

4

2 に答える 2

2

自分を鍛えてください - この答えは正規表現を書き込み専用言語として強化します!

^(([ks](?!.*[ks]))|([zx](?!.*[zx]))|([ap](?!.*[ap]))){0,3}$

複数行の文字列にGroovy(またはJava 7)を使用している場合、これは次のようにより明確に記述できます。

^(?x:
    (  (  [ks]  (?!.*[ks])  )
    |  (  [zx]  (?!.*[zx])  )
    |  (  [ap]  (?!.*[ap])  )
    )  {0,3}
)$

このバージョンは、そのグループが文字列の後のどこかに現れない場合にのみ、各グループに一致します。これは「ゼロ幅、先読みアサーション」です。

于 2012-06-09T17:03:44.143 に答える
0

理解できたら、'?' を置き換えます。「パイプ」で:試してください:"[ks]|[zx]|[ap]"

于 2012-06-09T15:14:45.577 に答える