假设我们想要预处理JSON字符串以去掉C样式行注释。一个例子可能看起来
像这样:// this is a comment
{ // another comment
true, "foo", // 3rd comment
"http://www.abc.com" // comment after URL
}
编写一个删除行注释的函数。
我尝试过使用正则表达式:
replaceAll("(?:/\\*(?:[^*]|(?:\\*+[^*/]))*\\*+/)|(?://.*)","")
这会删除网址,我输出为:
{
true,foo ,
http:
}
我想要网址,即我希望我的输出为 { 是的,foo, http://www.abc.com }
感谢您的帮助
答案 0 :(得分:1)
问题是,在正则表达式(?://.*)
的最后一个条款中,您在//
上匹配,但您想要做的是匹配//
但不在://
上}。
一旦解决方案是用这样的夫妇替换你的规则:
a)当前面有非//
字符时匹配:
:[^:]//.*
b)匹配//
,如果它位于一行的开头:^//.*
试试这个:
String input = "// this is a comment\r\n" +
"\r\n" +
"{ // another comment\r\n" +
"\r\n" +
" true, \"foo\", // 3rd comment\r\n" +
"\r\n" +
" \"http://www.abc.com\" // comment after URL\r\n" +
"\r\n" +
"}";
System.out.println(input.replaceAll("(?:/\\*(?:[^*]|(?:\\*+[^*/]))*\\*+/)|[^:]//.*|^//.*",""));