2014-01-24 97 views
3

我有以下代码:匹配器的匹配()方法返回false,找到()和groupCount()的返回结果

private static final String ET_AL = "(\\p{Punct}|\\b|^|\\s)et\\.? al\\.?(\\b|$|\\s)"; 
private static final Pattern ET_AL_PATTERN = Pattern.compile(ET_AL, Pattern.CASE_INSENSITIVE); 

...

Matcher m = ET_AL_PATTERN.matcher("Doe, J.; Brown, C.; et al"); 
while(m.find()) { 
    System.out.println(m.group()); 
} 
m.reset(); 
System.out.println(m.matches()); 

循环打印 “等”但是对m.matches()的调用返回false。此外,m.groupCount()返回2.有关正在发生的事情的任何帮助?

回答

4

但是对m.matches()的调用返回false。

这是因为Matcher#matches()要求你匹配完整的输入与你的正则表达式。

从Javadoc中:

公共布尔匹配()

尝试的整个区域与模式相匹配。如果匹配 成功,则可以通过开始,结束和组方法获取更多信息。

+0

啊,我明白我做了什么。或者更准确地说我没有做的事情。谢谢。我将*添加到模式的开头和结尾。 –

+0

是的,应该肯定有帮助。 – anubhava

+1

@ScottShipp只有在你的输入没有行分隔符如'\ n'' \ r'时,才会有助于'。*'。在这种情况下,你还必须使用'Pattern.DOTALL'标志来让点''符合行分隔符。如果它解决了您的问题,也请不要忘记[接受解答](http://meta.stackexchange.com/a/5235/186652)。 – Pshemo