【发布时间】:2015-04-09 06:24:31
【问题描述】:
我想删除 Java 代码中的 cmets。我看过很多例子,但每个都写错了。
下面是代码示例:
String somestring = "http://google.com"; // "//google.com";" is going to be removed
另一个例子:
get.setHeader("Accept", "*/*"); // "/*");" and later is going to be removed too
但我想要正确的正则表达式来处理这些情况
我试过了: http://ostermiller.org/findcomment.html Regular expression to remove comment 和其他流行的例子
它应该处理常见的情况:
somemethod();//it should be removed
somemethod(); /* some comment that may end on other line */
但应处理的其他情况:
String somestring = "http://google.com"; // url shouldn't be touched
get.setHeader("Accept", "*/*"); // "*/*" shouldn't be touched too
【问题讨论】:
-
你的预期输出是什么?
-
阅读您提供的链接的底部段落:解决此问题的方法是编写正则表达式来描述每个可能的较大元素,同时找到它们,确定每个元素的类型是,并丢弃不是 cmets 的。有一些称为词法分析器或标记器的工具可以帮助完成这项任务。
-
您将需要 this approach。 Java 与 JavaScript 非常相似,所以我想对我的答案进行一些细微的调整就可以解决问题。
-
这里的正则表达式似乎很难,因为你必须计算
"、\n、/*个字符 -
Regex 不是最好的工具。我们必须检查字符串中是否不存在
//,这并不是那么简单(因为一些计算"可能会很棘手,因为其中一些可能是"文字用\"转义的)。但我们也不能假设所有"前面有\都是文字,因为字符串也可能是"\\",在这种情况下最后一个"不是"文字,而是正确的字符串结尾表示\字符。你需要的是解析器。