2014-01-24 130 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