【问题标题】:Regex for nested comments [closed]嵌套评论的正则表达式 [关闭]
【发布时间】:2021-06-28 04:27:24
【问题描述】:

是否有任何检测嵌套 cmets 的正则表达式规则? 对于“嵌套通信”,我的意思是这样的:

/* something /* something */ something  */

我不想要一个检测到这样的东西的规则:

/* something inside /* something inside */ something inside */ something outside /*something inside */

我希望something outside 之后的评论成为新的检测。 谢谢!

【问题讨论】:

  • 一般来说,正则表达式并不擅长匹配嵌套模式。
  • 虽然您可以使用 PCRE 中的递归功能来做到这一点。
  • 这个对不同问题的回答使用递归正则表达式。类似的解决方案可能对您有用。 stackoverflow.com/a/66881353/3216427

标签: regex nested expression comments


【解决方案1】:

如果您使用支持递归的正则表达式引擎,如 PCRE(Perl、PHP 等),这是可能的。

您可以使用此正则表达式来捕获嵌套的 cmets:

\/\*(?:(?!\/\*|\*\/).|(?R))*\*\/
  • \/\* 匹配 /*
  • (?:...)非捕获组
  • (?!\/\*|\*\/). 任何不构成 /**/ 的字符
  • |
  • (?R)递归整个规则,也就是/* ... */的整个结构
  • \*\/匹配*/

查看proof

但是没有递归,你只能用你使用的任何编程语言带来的逻辑来实现它。


另外如果你想捕获cmets之外的内容,你可以试试

(\/\*(?:(?!\/\*|\*\/).|(?1))*\*\/)|((?:(?!(?1)).)+)

它们存储在不同的组中。

查看proof

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-04
    • 1970-01-01
    • 2019-11-23
    • 2015-04-09
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多