我正在尝试创建一个 JAVA 正则表达式来测试是否设置了特定选项。目前我有[ks]?[zx]?[ap]?
所以它要么是 k、s 或什么都没有,然后是 z、x 或什么都没有,最后是 a、p 或什么都没有。
这个正则表达式的唯一问题是它只适用于这个订单,但它应该适用于所有订单,因为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]"