4

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

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

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 回答