我編譯正則表達式圖案在調試控制檯匹配特定的命令,其中之一是:爲什麼非捕獲組更改正則表達式的行爲?
Pattern.compile("^\\s*\\\\connect\\s+((\\d{1,3}\\.){3}\\d{1,3})(?:\\s+(\\d+))?\\s*$");
因此有可能進入
\connect 127.0.0.1 2345
或離開港口
\connect 127.0.0.1
只要我使用最後一個空格來分隔字段,就會忽略空格。但是,當IP轉到組1(這是可以的),端口轉到組3(正如我寫的,我知道)。
所以我想用一個非捕獲組爲IP地址的前三部分:
Pattern.compile("^\\s*\\\\connect\\s+((?:\\d{1,3}\\.){3}\\d{1,3})(?:\\s+(\\d+))?\\s*$");
所以我想我會得到第1組的IP地址和第2組 端口但是現在Matcher.matches()對於相同的輸入返回false ...問題在哪裏?
Arrgh,它確實工作。首先,我還遇到了另一個導致匹配器錯誤的問題。我解決了這個問題,刪除了?:所以它再次運行。然後我重試了非分組,但是用matcher.group(2)調用的斷點_behind_。它沒有被擊中,所以我認爲它仍然不起作用。但問題是我忘記將包含端口的組的呼叫從3改爲2.因此出現異常。我看不到它,因爲在調用一個調用命令檢查方法的方法的Method.invoke調用周圍的try catch結構中,它沒有輸出。 – jue78 2012-08-10 11:48:26