单行注释的正则表达式

5
我正在尝试创建一个正则表达式来识别注释。它必须以//开头,并以换行符或*)模式结尾。
目前,我已经得到了(\/\/)([^\n\r]+),但我无法添加*)模式。
有什么提示吗?

3
每个问题请只提一个问题 - NathanOliver
2
提示:不要尝试使用正则表达式解析源代码。相关 - Jerry Coffin
如果在字符串 "some // stuff" 中间出现 //,会发生什么? - Galik
@NathanOliver:我完全要版权那句话:P - Lightness Races in Orbit
@LightnessRacesinOrbit 你得不到它。这是我的 muhahaha ;) - NathanOliver
显示剩余4条评论
3个回答

7
尝试这样做: ^\/\/[^\n\r]+(?:[\n\r]|\*\))$ 匹配:
  • ^ 字符串的开头
  • \/\/ 匹配两个斜杠
  • [^\n\r]+ 匹配不是换行符或回车符的字符,1次或多次
  • (?: 非捕获组
    • [\n\r]|\*\) 匹配换行符、回车符或*)
  • ) 关闭非捕获组
  • $ 字符串的结尾
编辑:

根据评论更新后,这是最终的正则表达式:

\/\/[^\n\r]+?(?:\*\)|[\n\r])

2
您可以使用 (\/\/)(.+?)(?=[\n\r]|\*\))?= 表示最后一个组是积极前瞻。它只断言以下字符可以匹配新行或 *) 样式。如果您也想匹配新行或 *) 样式,请删除 ?=.+? 表示懒惰匹配,即尽可能少地匹配字符。因此,对于字符串例如 // something *) something *),它会在第一个 *) 之前停止匹配。
请注意,此模式不匹配 //\n(您先前的正则表达式也没有),因为 + 表示至少一个字符。如果要匹配这样的字符串,请在正则表达式中使用 * 替代 +
最后,虽然您可以使用正则表达式来解析这种单行注释,但正如 Jerry Coffin 在评论中所说,不要尝试使用正则表达式来解析编程源代码,因为由所有合法源代码构成的语言通常不是正则语言。

谢谢,你的回答非常完美。我添加了 * 来匹配空注释。非常感谢。 - MaxThom
这是一个不错的方法。如果没有组标记(...),那就更好了,因为使用内置于编程语言中的正则表达式库来评估匹配项会更容易:\/\/.*(?=[\n\r]|\*\)) - hendrikschnack

0
扩展@the-fourth-bird的答案,如果您需要查找一块单行注释,类似于这样将3更改为行数,则应该有助于查找更大的块。
^(\/\/.*[\r\n]){3}$

如果想要查找带有 /** */ 注释块的代码 这里 会解释几种方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接