[英]Java regex using pattern matcher not returning correctly?
我必须从以下字符串获取索引值:
Home.number[12].parent.
我想取回值12。
这是我尝试过的:
//escape . / [ ]
private static final String pattern = "Home\\.number\\[([0-9]*)\\]*";
private static final Pattern addressPattern = Pattern.compile(pattern);
private static int getIndex(String input, Pattern pattern){
Matcher m = pattern.matcher(input);
if (m.matches()){
return Integer.valueOf(m.group(2));
}
return -1;
}
public static void main(String[] args){
System.out.println(getIndex("Home.number[123].parent", addressPattern);
System.out.println(getIndex("Home.number[456].child", addressPattern);
}
我都得到-1
,这意味着找不到匹配项。
使用调试器,我发现m.matches()
返回false
。 我不知道为什么。
PS:我也尝试使用Pattern.quote("Home.number[([0-9]*])*")
和StringUtils.EscapeJava("Home.number[([0-9]*)]*")
。 两者均未返回任何匹配结果。
您的Pattern
应该看起来像
private static final String pattern = "Home\\.number\\[(\\d+)\\]\\..*";
private static final Pattern addressPattern = Pattern.compile(pattern);
而且您的匹配者只有1
组。
private static int getIndex(String input, Pattern pattern) {
Matcher m = pattern.matcher(input);
if (m.matches()) {
return Integer.parseInt(m.group(1));
}
return -1;
}
而你需要关闭第二个括号在您的通话main
。 就像是
public static void main(String[] args) {
System.out.println(getIndex("Home.number[123].parent", addressPattern));
System.out.println(getIndex("Home.number[456].child", addressPattern));
}
当我进行这些更改时,我会得到预期的结果
123
456
"Home\\\\.number\\\\[([0-9]*)\\\\]*"
更改为"Home\\\\.number\\\\[([0-9]+)\\\\].*"
(在最后一个*
之前加点) return Integer.valueOf(m.group(1));
System.out.println()
调用中。 像这样:
private static final String pattern = "Home\\.number\\[([0-9]*)\\].*";
private static final Pattern addressPattern = Pattern.compile(pattern);
private static int getIndex(String input, Pattern pattern){
Matcher m = pattern.matcher(input);
if (m.matches()){
return Integer.valueOf(m.group(1));
}
return -1;
}
public static void main( String[] args ){
System.out.println(getIndex("Home.number[123].parent", addressPattern));
System.out.println(getIndex("Home.number[456].child", addressPattern));
}
如果删除除方括号之间的所有内容,则可以一行完成:
private static int getIndex(String input) {
return input.matches(".*\\[\\d+].*") ? -1 : Integer.parseInt(input.replaceAll(".*\\[|].*", ""));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.