正则表达式删除除括号内的所有注释

时间:2013-10-10 19:51:44

标签: java regex

我有一个正则表达式,可以很好地找到单行和多行注释,但我想排除括号内的注释。我认为我需要一个消极的前瞻,但却无法让它发挥作用。

正则表达式:

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

要忽略的样本:

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

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

使用Java正则表达式确保//在一对括号内是不可能的。但你可以冒昧地检查 next 括号是否是结束括号(如果是,则拒绝匹配)。当然,只有在注释中没有嵌套括号且没有括号时才有效:

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

会这样做。

至于你的正则表达式的第一部分与/*...*/评论相匹配 - 我认为这有点过于复杂。由于Java不允许嵌套注释,

/\\*.*?\\*/

会这样做。您只需确保允许点匹配正则表达式的这一部分中的换行符:

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

答案 1 :(得分:0)

你可以逃脱这个:

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

即在前面添加一个负面的外观以断言下一个括号字符不是一个紧密的括号