2015-05-26 48 views
0

我有一些日誌文件中的文本是這樣的:正則表達式中使用命名組使「回顧後沒有明顯的最大長度」的錯誤

21.125.155.111 - - [01/Jan/2012:12:07:48 +0530] "GET /digital-cameras/digital-camera/sony-qx-dsc-qx100-point-shoot-digital-camera-black.html HTTP/1.1" 200 1470 "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.17) Gecko/20110420 Firefox/3.6.17" "-"

,我的模式是:

"(?<ip>[\\d\\.]+)(.+)\\\"(?<verb>\\w+) (?<address>.+) (?<protocol>[HTTPS]+)/(?<version>.+?)\\\"\\s(?<status>\\d+)\\s(?<time>\\d+)\\s\\\"(?<useragent>.*)\\\"\\s(.*)" 

但是當我嘗試編譯模式時,我得到了上面的PatternSyntaxException。

它在C#中完美工作,但在Java 1.6中發生異常。

+0

顯示您的代碼。 – tnw

+1

看看java和c#中使用的正則表達式模式之間的區別: http://stackoverflow.com/questions/538579/are-java-and-c-sharp-regular-expressions-compatible – PCM

+0

公共類測試器類 { \t私有靜態最後字符串輕拍= 「(? [\\ d \\。] +)(+)\\\」(? \\ W +)(?

。+)(? [HTTPS] +)/(?。+?)\\\「\\ s(? \\ d +)\\(?

回答

3

你得到的是一個Java錯誤,它會產生錯誤的錯誤信息。 Java 6不支持命名組,因此,當正則表達式編譯器看到(?<時,它會得出結論,即您試圖創建倒序。如果下一個字符只是=!,它應該等到它再讀取一個字符,然後它會拋出一個異常,並提供一個更爲一般的解釋,比如「unknown group construct」。

但是,您的問題的解決方案是升級到Java 7,或使用舊式編號的組而不是指定的種類。

+0

很好的答案! +1 – sln

+0

非常感謝艾倫我現在刪除了已命名的組和其工作。 –

相關問題