我最近在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.");
}
Run Code Online (Sandbox Code Playgroud)
结果:未匹配(意外结果)说明这一点
我得到输出"不匹配." 这对我来说很奇怪,在阅读https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html时,我正在使用X +,它匹配"一个或多个倍".
我以为我的代码用语言会是这样的:
"检查字符串"GETs"中是否有一个或多个不属于A到Z的字符."
所以我期待以下结果:
"是的,在"GETs"中有一个不属于AZ的角色,正则表达式是一场比赛."
然而事实并非如此,我很困惑为什么会这样.我尝试了以下方法:
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.");
}
Run Code Online (Sandbox Code Playgroud)
结果:不匹配.(预期结果)
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.");
}
Run Code Online (Sandbox Code Playgroud)
结果:匹配.(预期结果)
请解释为什么我的第一个例子不起作用.
Matcher.matchestrue仅当ENTIRE区域 与模式匹配时才返回.对于您正在寻找的输出,请
Matches.find改用
Pattern p = Pattern.compile("[^A-Z]+");
Matcher matcher = p.matcher("GETs");
if (matcher.matches()) {
Run Code Online (Sandbox Code Playgroud)
因为整个区域 'GETs'不是小写而失败
Pattern p = Pattern.compile("[A-Z]+");
Matcher matcher = p.matcher("GETs");
if (matcher.matches()) {
Run Code Online (Sandbox Code Playgroud)
这会失败,因为整个区域 'GETs'不是大写的
Pattern p = Pattern.compile("[A-Z]+");
Matcher matcher = p.matcher("GET");
if (matcher.matches()) {
Run Code Online (Sandbox Code Playgroud)
整个区域'GET'是大写的,模式匹配.
| 归档时间: |
|
| 查看次数: |
2407 次 |
| 最近记录: |