正则表达式删除评论

Jat*_*tin 10 regex

我正在尝试编写一个正则表达式,用于查找文本中的所有注释.例如,所有之间/* */.例:

/*你好*/

当我这样做时:/\*.*\*/它表现得很奇怪,没有显示任何东西.这有什么问题?

编辑:评论可以分布在多行

小智 18

与上面发布的示例不同,您尝试匹配跨越多行的注释.默认情况下,.与换行符不匹配.因此,您必须在正则表达式中启用多行模式以匹配多行注释.

此外,您可能需要使用.*?而不是.*.否则它将使最大匹配成为可能,这将是第一个开放评论和最后一个评论之间的所有内容.

我不知道如何在Sublime Text 2中启用多行匹配模式.我不确定它是否可用作模式.但是,您可以使用CTRL + Enter在实际模式中插入换行符.所以,我建议这个替代方案:

/\*(.|\n)*?\*/
Run Code Online (Sandbox Code Playgroud)

如果Sublime Text 2无法识别\n,则可以使用CTRL + Enter在模式中插入换行符,代替\n.


Ste*_*ler 5

我几年前遇到过这个问题并写了一篇关于它的文章.

如果您无法访问非贪婪匹配(并非所有正则表达式库都支持非贪婪),那么您应该使用此正则表达式:

/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/
Run Code Online (Sandbox Code Playgroud)

如果您确实可以访问非贪婪匹配,那么您可以使用:

/\*(.|[\r\n])*?\*/
Run Code Online (Sandbox Code Playgroud)

另外,请记住,正则表达式只是这个问题的启发式方法.正则表达式不支持某些内容似乎是对正则表达式的注释但实际上不是:

someString = "An example comment: /* example */";

// The comment around this code has been commented out.
// /*
some_code();
// */
Run Code Online (Sandbox Code Playgroud)