2013-05-21 20 views
2

正如我實習的一部分,我必須使用正則表達式來分析日誌文件。這是Java日誌,我在檢測異常時遇到了問題。正則表達式記事本+ OK JDK 1.6 NOK

事實上,我的正則表達式工作在記事本+ +,但不與Java(1.6),該matcher.find()需要很,...,很長一段時間,終於找到0匹配。

這是我的正則表達式:

(.*\bERROR\b.*)\r?\n((\tat|.*[Ee]xception|\t\.\.\.|\r?\n|ORA-).*\r?\n)+(^(?!.*ERROR).+)\r?\n 

你知道爲什麼嗎?

謝謝。

+1

你逃脫\(反斜線)?你能顯示你使用的確切代碼嗎? – assylias

回答

1

反斜槓\是Java編程語言和正則表達式兩種轉義字符。因此,當在java(以及許多其他編程語言)中反斜槓爲正則表達式時,您必須複製反斜槓。

例如寫\\s而不是\s需要正則表達式的語法。

+0

記住,'\ t','\ r'和'\ N'可以保持轉義。 –

+0

是的,我們必須在Java正則表達式中加雙斜線。我只寫出表達方式使其更清晰。我的問題是當宣佈我的對象時,我忘記了MULTILINE標誌。 – user1614620

1

我可以推薦你http://www.regexplanet.com/advanced/java/index.html測試您的正則表達式,則有相應的字符串來構建Java RegExp對象

+0

我已經在提及的網站上嘗試過,但表達式不起作用。問題出在Pattern對象的聲明中。 現在它的工作:模式模式= Pattern.compile(正則表達式,Pattern.MULTILINE); – user1614620

0

的問題是使用^字符,不要忘記多標誌申報Pattern對象。

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE); 

非常感謝!你能告訴我爲什麼我們應該使用它嗎?