Java Regex字母数字匹配

时间:2017-02-27 00:02:43

标签: java regex

我正在尝试用Java编写一个正则表达式来帮助我识别具有特定格式的字母数字的匹配:9个字符长,前5个用于数字[0-9],接下来的三个大写字符{{1最后一个字符是数字[A-Z]。我现在正在尝试的是以下内容:

[0-9]

当我只通过字母数字时,例如Matcher m = Pattern.compile("^[0-9]{1,5}[A-Z]{3}[0-9]{1}?$", Pattern.UNICODE_CASE).matcher(str.toString()); while (m.find()) { System.out.println("Match found::" + m.group(0)); } ,上面的代码有效,找到匹配项。但是,如果我传递更大的表达式,例如24135AB6John goes 24135AB6 away back,我的代码不起作用。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

首先,您的代码在仅传递A234B时也会起作用,因为[0-9]{1,5}表示1到5次出现。

尝试使用此正则表达式:

^[0-9]{5}[A-Z]{3}[0-9]?$

当然24135AB6不会像您期望的那样输入三个字母字符,而不仅仅是两个。

另外,如果你想在模式之前忽略任何乱码,你需要删除^,如果你想忽略模式之后的任何东西,你需要删除$符号。

开头的

^表示:我的字符串必须与下一步后面的内容完全一致

$结尾意味着:我的字符串必须以我在此处定义的结尾

答案 1 :(得分:0)

The regex (?<=^|\\s) ensures that either start of the input or a white space before the sequence.
The regex (?<=^|\\s)[0-9]{1,5}[A-Z]{3}[0-9]{1}\\b\\w* will find sequences that starts with a 5 numbers 3 Uppercase letters and 1 number followed by 0 or more words.


String input="24135ABE6 John goes 24135ABA6 away back 24135ABC6 24135ABD6A";
Pattern regex = Pattern.compile("(?<=^|\\s)[0-9]{1,5}[A-Z]{3}[0-9]{1}\\b\\w*");

Matcher matcher = regex.matcher(input); 
while (matcher.find())
{
      System.out.println(matcher.group());
}

output:

24135ABE6
24135ABA6
24135ABC6