单行注释的正则表达式

时间:2018-03-08 17:05:55

标签: c++ regex

我正在尝试使用正则表达式来识别评论。它必须以//开头,并以新行或*)模式结束。

目前,我设法获得此(\/\/)([^\n\r]+),但我未能成功添加*)模式。

任何提示?

2 个答案:

答案 0 :(得分:2)

尝试这样: ^\/\/[^\n\r]+(?:[\n\r]|\*\))$

匹配

  • ^字符串的开头
  • \/\/匹配两个正斜杠
  • [^\n\r]+匹配不是新行或回车1次或多次
  • (?:非捕获组
    • [\n\r]|\*\)匹配换行符或回车符或*)
  • )关闭非捕获组
  • $字符串的结尾

编辑:

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

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

答案 1 :(得分:0)

您可以使用(\/\/)(.+?)(?=[\n\r]|\*\))

?=表示最后一组是积极向前看。它只声明以下字符可以匹配新行或 - *)模式。如果您还想匹配新行或*)模式,只需删除?=

.+?表示延迟匹配,即尽可能少地匹配字符。因此,对于// something *) something *)这样的字符串,它会在第一个*)之前停止匹配。

请注意,此模式与//\n不匹配(您之前的正则表达式不一样),因为+表示至少有一个字符。如果您想匹配此类字符串,请在正则表达式中使用*而不是+

最后,尽管你可以使用正则表达式来解析这样的单行注释,正如Jerry Coffin在评论中所说,不要尝试使用正则表达式解析编程源代码,因为所有合法源代码构成的语言通常不是常规语言。