Java 使用find()方法时,第一个实例不匹配
我正在搜索带有正斜杠(例如/n/)之间数字的子字符串,但是find()方法总是通过正则表达式的第一个匹配项。 为什么?我的正则表达式有问题吗Java 使用find()方法时,第一个实例不匹配,java,regex,matcher,Java,Regex,Matcher,我正在搜索带有正斜杠(例如/n/)之间数字的子字符串,但是find()方法总是通过正则表达式的第一个匹配项。 为什么?我的正则表达式有问题吗 Pattern p = Pattern.compile("(\\/)(\\d+)(\\/)"); Matcher m = p.matcher("A/8/E/5/F/6/G/7/H"); while (m.find()) { System.out.println(m.group(0)); } 我认为您需要这样做,因为您只需要那些斜杠之间的数字 w
Pattern p = Pattern.compile("(\\/)(\\d+)(\\/)");
Matcher m = p.matcher("A/8/E/5/F/6/G/7/H");
while (m.find()) {
System.out.println(m.group(0));
}
我认为您需要这样做,因为您只需要那些
斜杠之间的数字
while (m.find()) {
System.out.println(m.group(2));
}
组(0)-给出整个匹配(/n/)
组(1)-给出第一个斜杠(/)
组(2)-为您提供编号(n)
组(3)-为您提供第二个斜杠(/)
如果您只想打印数字,请使用m.group(2)
另一个解决方案是使用
Pattern p=Pattern.compile((?假设您打算使用m,您的组是“/”、“8”和“/”。尝试“\/(\d+)\/”只匹配“8”您必须使用group(i)
来提取括号中的第i项内容(不包括非捕获组)
group(0)
或group()
是整个模式
因此,对于您的示例,您需要组(2)
另请注意,您的代码在8/5/4/3
上不起作用,因为8
无法匹配,因为它前面没有/
,4
无法匹配,因为5
在中间使用了/
,而3
无法匹配,因为它后面没有//code>。您需要包括开始检查用于8
的字符串(^
)和用于3
的字符串结尾($
),并使用前瞻(?=…)
用于4
我还使用了一个非捕获组(?:…)
,因此您可以使用组(1)
而不是组(2)
(这是(?:…)
的唯一区别)
另外,您不需要转义/
最终代码:
Pattern p = Pattern.compile("(?:^|/)(\\d+)(?=/|$)");
Matcher m = p.matcher("8/5/4/3");
while (m.find()) {
System.out.println(m.group(1));
}
m
和m1
是同一个对象吗?哦,是的,我在编辑我的代码时搞砸了。总是通过正则表达式的第一次出现是什么意思?
?我得到了响应/8/,/5/,/6/,/7/
我最初用m1命名它,并将它编辑为m只是为了清理代码。错误仍然存在
Pattern p = Pattern.compile("(?<=\\/)(\\d+)(?=\\/)");
Matcher m = p.matcher("A/8/E/5/F/6/G/7/H");
while (m.find()) {
System.out.println(m.group(0));
}
Pattern p = Pattern.compile("(?:^|/)(\\d+)(?=/|$)");
Matcher m = p.matcher("8/5/4/3");
while (m.find()) {
System.out.println(m.group(1));
}