长度与空格的正则表达式

时间:2018-03-03 11:10:19

标签: java regex

我正在尝试使用以下条件编写正则表达式。

  1. 在字符串中的任何位置留空。
  2. 前三个是字符范围(1-3)
  3. 接下来的六个是数字(必须) - 范围(6)
  4. 下一个可选的字符 - 范围(1-3)
  5. 在该选项之后具有数字 - 范围(0-2)
  6. 为此我尝试过很多东西都没有用。

    ^[a-zA-Z]{1,3}[0-9]{6}[a-zA-Z]{0,3}[0-9]{0,2}
    

    此表达式适用于匹配所有条件,但不允许空字符串。提前谢谢。

    我只想验证字符串,如" AB 123456 ADF 12"。 正如我提到的第一点,字符串在给定字符串中的任何位置都包含空格,例如" AB 123 456 ADF 12"。

1 个答案:

答案 0 :(得分:2)

您必须将模式包装在括号中,并使用?将其设为可选:

^(?:[a-zA-Z]{1,3}[0-9]{6}[a-zA-Z]{0,3}[0-9]{0,2})?$
  • ^断言字符串的开头
  • (?:开始非捕获组
    • [a-zA-Z]{1,3}[0-9]{6}[a-zA-Z]{0,3}[0-9]{0,2}您的模式
  • )? NCG结束,可选
  • $断言字符串结尾

如果要匹配带有空白字符的字符串,请添加\\s(或\s处理文字)并删除?

^(?:[a-zA-Z]{1,3}[0-9]{6}[a-zA-Z]{0,3}[0-9]{0,2}|\s*)$
                                                ^^^^

Live demo

更新

基于评论:

^(?:[a-zA-Z](?:\s*[a-zA-Z]){0,2}\s*\d(?:\s*\d){5}(?:\s*[a-zA-Z](?:\s*[a-zA-Z]){0,2})?\s*(?:\d\s*\d?)?)$

Live demo