我必须从以下字符串中获取索引值:
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
。
我无法弄清楚为什么。
P.S: 我也试过使用 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
关于使用模式匹配器的 Java 正则表达式未正确返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31305698/