码迷,mamicode.com
首页 > 其他好文 > 详细

注释的正则表达式

时间:2021-04-10 12:54:54      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:comment   comm   正则   nal   中间   解决   解释   排除   ***   

最近在读Modern Complier Implementatnion in C.

做到语法分析(syntax analysis)时,发现不知道如何写注释的正则表达式:

以下的正则表达式:

"/*"[.|\n]"*/"

会根据最长匹配原则,将两行注释间的代码当作注释:

/*comments*/

var a = 1

/*comments again*/

第一个/*会和最后一个*/相匹配

 

以下的正则表达式:

\/\*.*\*\/

会检测不了跨行的注释。

 

经过搜索发现以下的正则表达式能够成功解决以上两个问题:

"/*"([^*]|\*+[^*/])*\*+"/"

解释一下:

开头是/*,没有问题

对于中间的元素,我们希望其中没有*/,所以我们接受如下两种情况:

1. 不是*的字符,用[^*]匹配

2. 一个或多个*字符,后面跟的字符不是/, 用\*+[^*/]匹配

最后,一个或多个*加上/结束注释

注意,对于中间的情况2,由于前面使用了\*+匹配一个或多个*字符,后面跟的字符在排除/之外,也要排除掉*,否则***也会被匹配到这种情况之中,从而使***和之后可能出现的/分离,不能结束正则表达式。

注释的正则表达式

标签:comment   comm   正则   nal   中间   解决   解释   排除   ***   

原文地址:https://www.cnblogs.com/caojiaming/p/14637462.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!