我最近在Java中使用正则表达式,我无法解决这个问题。
Pattern p = Pattern.compile("[^A-Z]+");
Matcher matcher = p.matcher("GETs");
if (matcher.matches()) {
System.out.println("Matched.");
} else {
System.out.println("Did not match.");
}
结果:未匹配(意外结果)解释此
我得到输出“不匹配”。在阅读https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html时,这对我来说很奇怪, 我使用的是X +,匹配“一次或多次”。
我认为我的语言代码会是这样的:
“检查字符串”GETs“中是否有一个或多个不属于A到Z的字符。”
所以我期待以下结果:
“是的,在”GETs“中有一个不属于A-Z的角色,正则表达式是匹配。”
然而事实并非如此,我很困惑为什么会这样。 我尝试了以下方法:
Pattern p = Pattern.compile("[A-Z]+");
Matcher matcher = p.matcher("GETs");
if (matcher.matches()) {
System.out.println("Matched.");
} else {
System.out.println("Did not match.");
}
结果:不匹配。 (预期结果)
Pattern p = Pattern.compile("[A-Z]+");
Matcher matcher = p.matcher("GET");
if (matcher.matches()) {
System.out.println("Matched.");
} else {
System.out.println("Did not match.");
}
结果:匹配。 (预期结果)
请解释为什么我的第一个例子不起作用。
答案 0 :(得分:6)
仅当整个区域时,
Matcher.matches
才会返回true
匹配模式。对于您要查找的输出,请改用
Matches.find
Pattern p = Pattern.compile("[^A-Z]+");
Matcher matcher = p.matcher("GETs");
if (matcher.matches()) {
失败,因为 整个地区 'GETs'
不是小写
Pattern p = Pattern.compile("[A-Z]+");
Matcher matcher = p.matcher("GETs");
if (matcher.matches()) {
此操作失败,因为 整个地区 'GETs'
不是大写
Pattern p = Pattern.compile("[A-Z]+");
Matcher matcher = p.matcher("GET");
if (matcher.matches()) {
整个区域'GET'
是大写的,模式匹配。
答案 1 :(得分:1)
你是第一个正则表达式要求匹配任何不在A-Z大写范围内的字符。比赛是在小写" s"在GETs。
答案 2 :(得分:0)
如果您希望正则表达式匹配大写和小写,则可以使用以下代码:
String test = "yes";
String test2= "YEs";
test.matches("(?i).*\\byes\\b.*");
test2.matches("(?i).*\\byes\\b.*");
在两种情况下将返回true