我需要从我的字符串中删除所有类型的评论,而不影响该字符串中定义的 URL。当我尝试使用正则表达式从字符串中删除注释时,URL 的某些部分也从字符串中删除。 我尝试了以下正则表达式,但发生了同样的问题。
String sourceCode= "/*\n"
+ " * Multi-line comment\n"
+ " * Creates a new Object.\n"
+ " */\n"
+ "public Object someFunction() {\n"
+ " // single line comment\n"
+ " Object obj = new Object();\n"
+ " return obj; /* single-line comment */\n"
+ "}"
+ "\n"
+ "https://stackoverflow.com/questions/18040431/remove-comments-in-a-string";
sourceCode=sourceCode.replaceAll("//.*|/\\*((.|\\n)(?!=*/))+\\*/", "");
System.out.println(sourceCode);
但不管怎么说,评论都被删除了,但输出是这样显示的
public Object someFunction() {
Object obj = new Object();
return obj;
}
https:
请帮我找出解决方案。
最佳答案
[^:]//.*|/\\*((.|\\n)(?!=*/))+\\*/
更改在前几个字符中 - [^:]
。这意味着 //
之前的符号不能是 :
。
我通常使用regex101.com使用正则表达式。为您的情况选择 python
语言(因为语言使用稍微不同的转义)。
这是人类难以阅读的非常复杂的正则表达式,因此另一种解决方案可能是使用几个简单的表达式并分多次处理传入的文本。喜欢
- 删除单行评论
- 删除多行注释
- 处理一些特殊情况
注意:处理正则表达式会花费很多时间。因此,如果需要性能,您应该检查其他解决方案 - 您自己的处理器或第三方库。
已编辑
正如@Wiktor 所建议的表达式 [^:]//.*|/\\*((?!=*/)(?s:.))+\\*/
是更快的解决方案。至少快 2-3 倍。
关于java - 如何在不影响 Java 中的 URL 的情况下从字符串中删除所有注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44582999/