gpt4 book ai didi

java - 匹配 C 风格多行注释的正则表达式

转载 作者:太空狗 更新时间:2023-10-29 22:42:33 33 4
gpt4 key购买 nike

我有一个字符串,例如

String src = "How are things today /* this is comment *\*/ and is your code  /*\* this is another comment */ working?"

我想从 src 中删除 /* this is comment *\*//** this is another comment */ 子字符串> 字符串。

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

最佳答案

最好的多行注释正则表达式(?s)/\*.*?\*/ 的展开版本,看起来像

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

参见 regex demo and explanation at regex101.com .

简而言之,

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

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

关于java - 匹配 C 风格多行注释的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13014947/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com