可选字符的正则表达式

时间:2016-02-16 14:14:52

标签: java regex

我正在使用以下正则表达式:

^([W|w][P|p]|[0-9]){8}$

上述正则表达式也接受wp1234567wp + 7位数)。预期:WP + 6位或wp + 6位或仅8位

例如:

WP123456
wp126456
64535353

1 个答案:

答案 0 :(得分:4)

请注意,[W|w]Ww|匹配,因为字符类中的|会失去其交替运算符的特殊含义。此外,通过在(...)周围设置分组[W|w][P|p]|[0-9],您可以匹配WP 数字的整个序列的8次出现。

您应该在有限量词中设置正确的值并删除分组并使用替换以允许wp + 6位数或仅8位数字:

^(?:[Ww][Pp][0-9]{6}|[0-9]{8})$

请参阅demo

正则表达式匹配:

  • ^ - 字符串的开头(如果用String#matches()检查整个字符串则不需要)
  • (?:[Ww][Pp][0-9]{6}|[0-9]{8}) - 2个替代方案:
    • [Ww][Pp][0-9]{6} - Ww后跟Pp后跟6位数字
    • | - 或......
    • [0-9]{8} - 正好是8位数
  • $ - 字符串结尾

其他情况(以防万一):

如果您需要匹配由7位或8位数字组成的字符串,则需要将{8}有限量词替换为{7,8}

^(?:[Ww][Pp][0-9]{6}|[0-9]{7,8})$

如果您不想匹配Wp123456wP123456,请在开头再使用一次:

^(?:(?:WP|wp)[0-9]{6}|[0-9]{8})$