我需要检查带有正则表达式的字符串。
有效字符串例如是:ABC0001
或A00023
。
我需要检查三个部分:
[a-zA-Z]{1,}
[0]{1,}
\\d+
整个字符串不得超过8个符号。
到目前为止我尝试了什么:
String NR_PATTERN = "^([a-zA-Z]{1,}[0]{1,}\\d+){3,8}$";
问题是,正则表达式不接受字符串:KDS0234
答案 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+)
希望这个帮助