0

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

正则表达式:

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

忽略的样本:

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

任何帮助,将不胜感激。

4

2 回答 2

1

//使用 Java 正则表达式无法直接确保 在一对括号内。但是您可以随意检查下一个括号是否是右括号(如果是,则拒绝匹配)。当然,只有在注释中没有嵌套括号且没有括号的情况下才有效:

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

会这样做。

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

/\\*.*?\\*/

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

Pattern regex = Pattern.compile("(?s)/\\*.*?\\*/|(?-s)//(?![^()\r\n]*\\)).*");
于 2013-10-10T20:22:40.583 回答
0

你可以摆脱这个:

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

即在末尾添加否定前瞻以断言下一个括号字符不是右括号

于 2013-10-10T20:22:34.313 回答