Regex 用于查找sql注释的正则表达式

Regex 用于查找sql注释的正则表达式,regex,Regex,我试图找到一个正则表达式,它可以用来匹配SQL风格的注释。单行注释相当简单---.*但我无法确定如何匹配多行注释。我不需要实际的替换代码,只需要正则表达式来匹配注释 例如: select * from valid_sql1; select * from valid_sql2; --comment here --comment select * from this_is_still_a_comment; /* select * from this_is_not_valid; */

我试图找到一个正则表达式,它可以用来匹配SQL风格的注释。单行注释相当简单---.*但我无法确定如何匹配多行注释。我不需要实际的替换代码,只需要正则表达式来匹配注释

例如:

select * from valid_sql1;

select * from valid_sql2; --comment here

--comment select * from this_is_still_a_comment;

 /*
 select * from this_is_not_valid;
 */

 /*comment*/ select * from valid_sql3; /*this is a comment*/
应成为:

 select * from valid_sql1;

 select * from valid_sql2;

 select * from valid_sql3;
非常感谢您的帮助。

正则表达式:
(?s)/\*.*?\*/|--注释[^\r\n]*

替换文本: 空位



这将为您删除注释。您必须匹配整个文件,而不是逐行匹配。

使用
g
lobal修饰符,如果您的正则表达式引擎接受:

/\/\*.*?\*\/|--.*?\n/gs
多行注释匹配需要使用
s
修饰符


如何忽略SQL字符串中的注释

--comment1

select *  from /*my table*/sample where a = 's -- string'
and c = 'ss/**/ /* */ 
 /*123*/'

/*
*
*/

/*  */

/**/

谢谢,这个演示非常有用,稍加修改就可以在java replaceAll\\/\*[\\s\\s]*?\*\\\\\/Nice中使用。不过有一个警告:它与文件末尾没有换行符的注释不匹配,因此值得先在脚本中添加换行符,以避免以任何不同的方式处理EOF。为了在.Net中使用它,我最后使用的语法是:
string scriptWithoutComments=Regex.Replace(script+“\n”、@“\/\*.*?\*.-.*?\n”、“”、RegexOptions.Singleline)它将匹配文本中类似注释的块。@Qix机器人审批者和随机编辑器今晚将全力以赴。很好的回滚。如果不是为了删除注释,为什么有人想在SQL中查找注释?