Java正则表达式与预期不匹配
我最近刚开始使用Java中的正则表达式,我不能完全理解这个问题Java正则表达式与预期不匹配,java,regex,Java,Regex,我最近刚开始使用Java中的正则表达式,我不能完全理解这个问题 Pattern p = Pattern.compile("[^A-Z]+"); Matcher matcher = p.matcher("GETs"); if (matcher.matches()) { System.out.println("Matched."); } else { System.out.println(
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.");
}
结果:不匹配(意外结果)解释此问题
我得到的结果是“不匹配”。这对我来说很奇怪,在阅读时,
我使用的是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.");
}
结果:不匹配。(预期结果)
结果:匹配。(预期结果)
请解释为什么我的第一个示例不起作用。您是第一个正则表达式要求匹配任何不在大写A-Z范围内的字符的人。匹配在GETs中的小写“s”上 仅当整个区域 与模式匹配 对于要查找的输出,请改用
每种情况的解释: 失败,因为整个区域
'get'
不是小写
这会失败,因为整个区域
'get'
不是大写的
整个区域
'GET'
是大写的,模式匹配。如果希望正则表达式以大写和小写形式匹配,可以使用以下命令:String test=“是”;
String test2=“是”;
test.matches((?i.*\\byes\\b.*);
test2.匹配((?i.*\\byes\\b.*)代码>
在这两种情况下都将返回true是的,抱歉写错了。不确定是否有反对票。不过,我已经尽力为您提供了一个合适的答案……:)这是一个重复。那不是真的,它清楚地说匹配一次或多次?这适用于匹配器。匹配
,而不是模式。匹配
@Pineda实际上也匹配正则表达式,与整个字符串匹配。我仍然不明白,根据网站:“X+X,一次或多次”@Shashwat:是的:-)是的,但是为什么不匹配呢?因为你试图匹配整个单词。是的,但是为什么第二个不匹配呢?这是一样的。第二种模式是询问整个单词get是否只有大写字母A-Z范围[^A-Z]+:没有大写字母A-Z[^A-Za-Z]+:没有大写字母A-Z或A-Z的
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.");
}
Pattern p = Pattern.compile("[^A-Z]+");
Matcher matcher = p.matcher("GETs");
if (matcher.matches()) {
Pattern p = Pattern.compile("[A-Z]+");
Matcher matcher = p.matcher("GETs");
if (matcher.matches()) {
Pattern p = Pattern.compile("[A-Z]+");
Matcher matcher = p.matcher("GET");
if (matcher.matches()) {