2013-10-10 97 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]*\\)).*");