我正在尝试用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));
}
,上面的代码有效,找到匹配项。但是,如果我传递更大的表达式,例如24135AB6
或John goes 24135AB6 away back
,我的代码不起作用。我该如何解决这个问题?
答案 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