没有任何订单的一堆选择的正则表达式

时间:2012-06-09 15:09:56

标签: java regex

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

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

2 个答案:

答案 0 :(得分:2)

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

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

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

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

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

答案 1 :(得分:0)

如果我明白了,请替换'?'通过'管道':尝试:"[ks]|[zx]|[ap]"