2011-12-26 61 views
2

我用正則表達式//.*|(\"(?:\\\\[^\"]|\\\\\"|.)*?\")|(?s)/\\*.*?\\*/來逃避註釋行,它運行良好,但它被擋在行if (broper.equals("//BR") && brlnum.equals("0"))上,並將其視爲註釋行並將其轉義出來。正則表達式到帶註釋的換行

需要進行哪些修正?

+0

我認爲你需要使用用來判斷你是內報價或不 – 2011-12-26 08:28:26

+0

@moon我從這裏HTTP得到這個遞歸函數內部正則表達式:// stackoverflow.com/questions/1657066/java-regular-expression-finding-comments-in-code/8634091#8634091。有沒有可能通過改變上面的正則表達式,以便它能夠避免字符串中的匹配? – rahulsri 2011-12-26 08:34:07

+0

我認爲你想匹配所有評論,比如'// ...'直到行和塊評論結尾'/ * ... * /'? – fge 2011-12-26 11:02:29

回答

0

這有點冒險,如果評論本身可能包含奇數的引號,將會失敗。但如果這不是一個問題,你可以去尋找// S中的後面是偶數的報價,從而確保你在這一刻是不是一個字符串中:

//(?:[^"\r\n]*"[^"\r\n]*")*[^"\r\n]*$|/\*.*?\*/ 

第二種選擇符合標準,unnested /*...*/評論。

在Java:

Pattern regex = Pattern.compile("//(?:[^\"\r\n]*\"[^\"\r\n]*\")*[^\"\r\n]*$|/\\*.*?\\*/", Pattern.DOTALL | Pattern.MULTILINE); 
+0

@Pietzcker o謝謝你的迴應,但這不是一般情況,實際上我的基本要求是我必須刪除這種類型的註釋'String str = srclines [lineNum]; //跳過註釋'意味着可以在分頁之後(;)。 – rahulsri 2011-12-26 09:38:39

+0

你試過這個正則表達式嗎?它不工作?如果是這樣,它會失敗的文字是什麼? – 2011-12-26 09:40:24

+0

@Pietzcker實際上我希望如果註釋字符在雙引號內出現,那麼它應該被忽略,否則它應該被處理以刪除comment.e.g。 'if(「\\ BR」.equals(str)&&!otherString.contains(「\\ BR」)//跳過條件'然後只刪除//跳過的條件 – rahulsri 2011-12-26 09:58:34