我有一个字符串例如
String src = "How are things today /* this is comment *\*/ and is your code /*\* this is another comment */ working?"
我想从字符串中删除/* this is comment *\*/ 和/** this is another comment */子src字符串。
/* this is comment *\*/
/** this is another comment */
src
我尝试使用正则表达式,但由于经验不足而失败。
尝试使用此正则表达式(仅单行注释):
String src ="How are things today /* this is comment */ and is your code /* this is another comment */ working?"; String result=src.replaceAll("/\\*.*?\\*/","");//single line comments System.out.println(result);
REGEX解释:
从字面上匹配字符“ /”
“ /”
从字面上匹配字符“ *”
“ *”
“。” 匹配任何单个字符
“。”
“ *?” 在0到无限制的时间之间,尽可能少的时间,根据需要扩展(延迟)
“ *?”
另外,这里是通过添加(?s)来表示单行和多行注释的正则表达式:
//note the added \n which wont work with previous regex String src ="How are things today /* this\n is comment */ and is your code /* this is another comment */ working?"; String result=src.replaceAll("(?s)/\\*.*?\\*/",""); System.out.println(result);
在最好的多行注释的正则表达式是一个展开的版本(?s)/\*.*?\*/,看起来像
(?s)/\*.*?\*/
String pat = "/\\*[^*]*\\*+(?:[^/*][^*]*\\*+)*/";
请参阅regex101.com上的regex演示和说明。
简而言之,
/\*
/*
[^*]*\*+
0+
*
1+
(?:[^/*][^*]*\*+)* -0+
[^/*][^*]*\*+-
a /
^/*
[^*]*
\*+
/
David的正则表达式需要26个步骤才能在我的示例字符串中找到匹配项,而[my regex] [2]仅需要12个步骤。在输入大量信息的情况下,David的正则表达式很可能会因堆栈溢出问题或类似原因而失败,因为.*?由于正则表达式引擎执行的每个位置处的惰性模式扩展,导致惰性点匹配效率低下,而我的模式却一口气匹配了线性文本块。
.*?