我正在尝试创建一个JAVA正则表达式来测试是否设置了特定选项。目前我有[ks]?[zx]?[ap]?
所以它是k,s或者没有,然后是z,x或者没有,最后是a,p或者没有。
这个正则表达式的唯一问题是它仅适用于这一个订单,但它应该适用于所有订单,因为kza
,azk
,zka
,kaz
, akz
和zak
做同样的事情。
答案 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]"