检查具有多种长度模式的字符串

时间:2016-07-08 08:32:47

标签: java regex

我需要检查带有正则表达式的字符串。

有效字符串例如是:ABC0001A00023

我需要检查三个部分:

  1. 因此字符串应以单词符号开头:[a-zA-Z]{1,}
  2. 然后有一分零:[0]{1,}
  3. 第三部分是数字\\d+
  4. 整个字符串不得超过8个符号。

    到目前为止我尝试了什么:

    String NR_PATTERN = "^([a-zA-Z]{1,}[0]{1,}\\d+){3,8}$";
    

    问题是,正则表达式不接受字符串:KDS0234

5 个答案:

答案 0 :(得分:3)

你可以在开头尝试一个积极的前瞻:

(?=^.{3,8}$)([a-zA-Z]{1,}[0]{1,}\\d+)

积极前瞻:

(?=^.{3,8}$)

将向前看?=并确认从字符串的开头^到结尾$,有.匹配的任何字符在3到8次之间{3,8}

答案 1 :(得分:1)

(…){3,8}表示你想...序列重复3到8次,而不是字符串是8个字符

你可以使用(知道你说你需要一个正则表达式,但也许这对你有用)

String NR_PATTERN = "[a-zA-Z]+0+\\d+";
String s = "ABC0001";
boolean match  = s.length() < 8 &&  s.matches(NR_PATTERN);

答案 2 :(得分:1)

您可以使用前瞻检查长度条件,然后匹配您的模式:

\b(?=[a-zA-Z0-9]{3,8})([A-Za-z]+0[0-9]+)\b

答案 3 :(得分:1)

你可以去:

\b(?=[A-Z]+0+\d+)\w{3,8}\b

请参阅a demo on regex101.com,在Java中使用双反斜杠

<小时/> 这将匹配:

ABC0001 A00023 and ABCD001

但不是

B123456 or 0001B

答案 4 :(得分:0)

(?=^.{3,8}$)([a-zA-Z]+[0]+\d+)

希望这个帮助