正则表达式以匹配C样式的多行注释

我有一根绳子

字符串src=”https://stackoverflow.com/questions/13014947/How 今天的事情/*这是注释*\*/您的代码/*\*这是另一条注释*/有效吗?”

我想从src字符串中删除/*这是comment*\*//**这是另一个comment*/子字符串

我尝试使用正则表达式,但由于经验不足而失败

最佳多行注释正则表达式是(?s)/\*.*?\*/的展开版本,如下所示

String pat=&quot/\\*[^*]*\\*+(?:[^/*][^*]*\\*+)*/";

请参阅regex101.com上的regex演示和说明

总之,

  • /\*-匹配注释开头/*
  • [^*]*\*+-匹配除*之外的0+个字符,后跟1+文字*
  • (?:[^/*][^*]*\*+)*-0+序列:
    • [^/*][^*]*\*+-不是/*(与[^/*]匹配),后跟0+非星号字符([^*]*),后跟1+星号(\*+
  • /-关闭/

David的正则表达式需要26个步骤才能在示例字符串中找到匹配项,而我的正则表达式只需要12个步骤。如果输入量很大,David的正则表达式很可能会因堆栈溢出问题或类似问题而失败,因为正则表达式引擎在每个位置执行惰性模式扩展,因此*?惰性点匹配效率低下,而我的模式一次匹配线性文本块

发表评论