如何通过正则表达式找到特殊模式

时间:2016-04-08 07:43:48

标签: java regex

我有以下正则表达式,它与两个不同的字符串不匹配。

找到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

1 个答案:

答案 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
  • 在Java中,不要忘记使用双反斜杠来转义元字符和速记字符类
  • 如果模式与String#matches()一起使用,则模式开头的^和模式末尾的$是多余的。

Java demo

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+"));