Java: 正则表达式没有按预期工作
Java: Regular expression doesn't work as expected
我有如下一段代码:
String range = "(15-42)";
String regexp = "(\d{1,})(\d{1,})";
Pattern p = Pattern.compile(regexp);
Matcher m = p.matcher(range);
m.find();
System.out.println(m.groupCount());
for(int i=0; i<=m.groupCount(); i++){
System.out.println("value:" + m.group());
}
然后我得到以下输出:
2
value: 15
value: 1
value: 5
但我只希望看到 2 个值:15 和 42。
为什么这没有按预期工作?
错误是你总是在应该调用 m.group(i)
的时候调用 m.group()
。
另一个错误是您忘记了正则表达式中的连字符。
工作代码:
String range = "(15-42)";
String regexp = "(\d{1,})-(\d{1,})";
Pattern p = Pattern.compile(regexp);
Matcher m = p.matcher(range);
m.find();
for (int i = 0; i <= m.groupCount(); i++) {
System.out.println("value:" + m.group(i));
}
这会打印出预期的结果:
value:15-42
value:15
value:42
您需要在正则表达式中添加连字符并使用 .group(i)
并以索引 1
开头(因为 m.group(0)
是您不需要的整个匹配值):
String range = "(15-42)";
String regexp = "(\d{1,})-(\d{1,})";
Pattern p = Pattern.compile(regexp);
Matcher m = p.matcher(range);
if (m.find()) {
System.out.println(m.groupCount());
for(int i=1; i<=m.groupCount(); i++){
System.out.println("value:" + m.group(i));
}
}
现在,您将拥有
2 // This is the number of capturing groups
value:15 // This is the value of the first capturing group
value:42 // This is the value of the second capturing group
这是一种不同的方法,但您可以使用此解决方案
System.out.println(m.groupCount());
String[] value = m.group().split("-");
for(int i=0; i<value.length; i++){
System.out.println("value:" + value[i]);
}
我有如下一段代码:
String range = "(15-42)";
String regexp = "(\d{1,})(\d{1,})";
Pattern p = Pattern.compile(regexp);
Matcher m = p.matcher(range);
m.find();
System.out.println(m.groupCount());
for(int i=0; i<=m.groupCount(); i++){
System.out.println("value:" + m.group());
}
然后我得到以下输出:
2
value: 15
value: 1
value: 5
但我只希望看到 2 个值:15 和 42。
为什么这没有按预期工作?
错误是你总是在应该调用 m.group(i)
的时候调用 m.group()
。
另一个错误是您忘记了正则表达式中的连字符。
工作代码:
String range = "(15-42)";
String regexp = "(\d{1,})-(\d{1,})";
Pattern p = Pattern.compile(regexp);
Matcher m = p.matcher(range);
m.find();
for (int i = 0; i <= m.groupCount(); i++) {
System.out.println("value:" + m.group(i));
}
这会打印出预期的结果:
value:15-42
value:15
value:42
您需要在正则表达式中添加连字符并使用 .group(i)
并以索引 1
开头(因为 m.group(0)
是您不需要的整个匹配值):
String range = "(15-42)";
String regexp = "(\d{1,})-(\d{1,})";
Pattern p = Pattern.compile(regexp);
Matcher m = p.matcher(range);
if (m.find()) {
System.out.println(m.groupCount());
for(int i=1; i<=m.groupCount(); i++){
System.out.println("value:" + m.group(i));
}
}
现在,您将拥有
2 // This is the number of capturing groups
value:15 // This is the value of the first capturing group
value:42 // This is the value of the second capturing group
这是一种不同的方法,但您可以使用此解决方案
System.out.println(m.groupCount());
String[] value = m.group().split("-");
for(int i=0; i<value.length; i++){
System.out.println("value:" + value[i]);
}