正则表达式一两个特定的字母

时间:2018-07-08 07:25:38

标签: java regex

我的正确表达是:

-四位数

-在E或R或WE或WR上签名

-三位数

表达式的第二部分应如何显示?我正在尝试

^([0-9]{4})([E,R,WE,WR]{1})([0-9]{3})$

但是第二部分不起作用。

2 个答案:

答案 0 :(得分:2)

使用替代字符而不是字符类:

^([0-9]{4})(E|R|WE|WR)([0-9]{3})$

您当前说的是与集合{ERW,}中的任何一个字符匹配的内容。但是我们可以进一步简化您的模式:

^([0-9]{4})(W?(?:E|R))([0-9]{3})$

答案 1 :(得分:0)

[E,R,WE,WR]{1}匹配1次出现的ER,W orsince [...]是character class匹配括号内定义的集合/范围中的单个字符。

您要使用W量词使?为可选,然后匹配ER

您可以使用

^([0-9]{4})(W?[ER])([0-9]{3})$
           ^^^^^^^

请参见regex demo

在这里,W?匹配1或0次出现的W,而[ER]字符类匹配ER

请注意,模式中的交替组越少,模式的效率就越高。