2013-10-10 136 views
0

我有一個正則表達式可以找到單行和多行註釋,但我想排除括號內的註釋。我想我需要一個負面的看法,但一直無法讓它工作。正則表達式除去括號內的所有註釋

正則表達式:什麼忽略

(?:/\\*(?:[^*]|(?:\\*+[^*/]))*\\*+/)|(?://.*) 

樣本:

url(data:image/gif;base64,R0lGODlhBgAGAIAAAOrq6v///yH5BAAHAP8ALAAAAAYzqlgoFADs=) 
src: url(//:) format('no404') 

任何幫助,將不勝感激。

回答

0

你可以逃脫這樣的:

your_regex(?![^(]*\\)) 

即提前加負看看到最後斷言,下一個括號字符不是閉括號

1

確保//是一對內部的括號不能直接用Java正則表達式。但是你可以自由地檢查下一個括號是否是關閉的(如果是,則拒絕匹配)。

//(?![^()\\r\\n]*\\)).* 

這樣做:當然,這只是如果沒有嵌套的括號和沒有括號中的註釋工作。

至於匹配/*...*/評論的正則表達式的第一部分 - 我認爲這有點過於複雜。由於Java不允許嵌套評論,因此

/\\*.*?\\*/ 

會做。你只需要確保該點允許匹配這部分正則表達式中的換行符:

Pattern regex = Pattern.compile("(?s)/\\*.*?\\*/|(?-s)//(?![^()\r\n]*\\)).*");