我有以下正则表达式,它与两个不同的字符串不匹配。
找到AB-434
的实际正则表达式。哪个与TEMS-54534
不匹配。
([a-zA-Z][a-zA-Z0-9_]+-[1-9][0-9]*)([^.]|\.[^0-9]|\.$|$)
这里是示例输入
TEMS-54534
TEMS-5453
TEMS-1233
TEMS-12
CB-213
CB-2135
CB-12
ABC-2223
ABC-223
ABC-12
答案 0 :(得分:3)
您似乎正在寻找以1个ASCII字母开头的模式,后跟一个或多个字母数字或下划线字符,后跟一个-
,后跟一个或多个不以0
开头的数字。< / p>
您可以使用
^[a-zA-Z][a-zA-Z0-9_]+-[1-9][0-9]*$
或
^[a-zA-Z]\w+-(?!0)\d+$
请参阅regex demo(和another one)。
解释:
^
- 字符串开头[a-zA-Z][a-zA-Z0-9_]+
/ [a-zA-Z]\w+
- 一个ASCII字母后跟1个字母数字/下划线字符-
- 连字符[1-9][0-9]*
/ (?!0)\d+
- 来自1-9
范围的数字后跟0个以上的数字(如果需要,您可以使用{min,max}
限制量词来限制它)$
- 字符串结尾更多详情:
[a-zA-Z0-9_]
可以写为\w
(如果没有使用Pattern.UNICODE_CHARACTER_CLASS
)String#matches()
一起使用,则模式开头的^
和模式末尾的$
是多余的。List<String> strs = Arrays.asList("TEMS-54534","TEMS-5453","TEMS-1233","TEMS-12","CB-213",
"CB-2135","CB-12","ABC-2223","ABC-223","ABC-12");
for (String str : strs)
System.out.println(str.matches("[a-zA-Z]\\w+-(?!0)\\d+"));