Java 乌托邦标识号-正则表达式模式匹配
我试图使用java正则表达式类(即模式和匹配器)验证乌托邦ID号 以下是需要满足的条件: 字符串必须以0-3个小写字母(含0-3个)开头。 紧跟字母之后,必须有一系列数字0-9,该段的长度必须介于2和8之间(包括2和8)。 紧跟数字之后,必须至少有3个大写字母。 下面是我写的代码Java 乌托邦标识号-正则表达式模式匹配,java,regex,validation,Java,Regex,Validation,我试图使用java正则表达式类(即模式和匹配器)验证乌托邦ID号 以下是需要满足的条件: 字符串必须以0-3个小写字母(含0-3个)开头。 紧跟字母之后,必须有一系列数字0-9,该段的长度必须介于2和8之间(包括2和8)。 紧跟数字之后,必须至少有3个大写字母。 下面是我写的代码 public class Solution{public static void main(String[] args) { BufferedReader br = new BufferedR
public class Solution{public static void main(String[] args) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int ntc;
String[] str;
try {
ntc = Integer.parseInt(br.readLine());
str = new String[ntc];
for (int i = 0; i < ntc; i++)
str[i] = br.readLine();
for (int i = 0; i < ntc; i++)
if (validate(str[i]))
System.out.println("VALID");
else
System.out.println("INVALID");
} catch (Exception e) {
e.printStackTrace();
}
}
private static boolean validate(String str) {
Pattern pr = Pattern.compile("[a-z]{0,3}[0-9]{2,8}[A-Z]{3,}");
Matcher mr = pr.matcher(str);
return mr.find();
}}
以下是输入及其相应的o/p
I/p:
三,
N761512618TUKEFQROSWNWFWEWEQEXKPWYCRK
rRf99
198Vlhjiyvebodqcqegegocgrmqpe
O/p:
有效的
无效的
有效的
第一个测试用例无效,因为它有九个数字,而不是最多八个。但它说的是有效的。
我写的正则表达式模式有什么错误吗?在正则表达式中使用开始和结束锚,以便进行精确的字符串匹配
Pattern pr = Pattern.compile("^[a-z]{0,3}[0-9]{2,8}[A-Z]{3,}$");
如果没有锚,它也会从字符串的中间匹配。使用而不是,以便将regexp与整个字符串匹配:
private static boolean validate(String str) {
Pattern pr = Pattern.compile("[a-z]{0,3}[0-9]{2,8}[A-Z]{3,}");
Matcher mr = pr.matcher(str);
return mr.matches();
}
此外,由于模式从未更改,我会将其移动到常量中,这样就不会在每次调用该方法时重新编译它:
static final Pattern UTOPIAN_ID_PATTERN =
Pattern.compile("[a-z]{0,3}[0-9]{2,8}[A-Z]{3,}");
private static boolean validate(final String str) {
Matcher mr = UTOPIAN_ID_PATTERN.matcher(str);
return mr.matches();
}