我正在尝试创建一个 JAVA 正则表达式来测试是否设置了特定选项。目前我有 [ks]?[zx]?[ap]? 所以它要么是 k、s 或没有,然后是 z、x 或没有,最后是 a、p 或没有。

这个正则表达式的唯一问题是它只适用于这一个顺序,但它应该适用于所有订单,因为 kzaazkzkakazakzzak 做同样的事情。

最佳答案

钢铁自己 - 这个答案强化了正则表达式作为只写语言!

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

如果您将 Groovy(或 Java 7)用于多行字符串,则可以更清楚地写成这样:

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

此版本匹配每个组,仅当该组未出现在字符串后面的某个位置时。这是一个“零宽度,前瞻断言”。

关于java - 正则表达式用于无任何顺序的选择,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10962086/

10-12 13:17