我正在编写一个例程来从一些C#代码中删除块或行注释.我查看了网站上的其他示例,但没有找到我正在寻找的确切答案.
我可以使用这个正则表达式与RegexOptions.Singleline完全匹配块注释(/*comment*/):
(/\*[\w\W]*\*/)
我可以使用RegexOptions.Multiline的正则表达式完整地匹配行注释(//注释):
(//((?!\*/).)*)(?!\*/)[^\r\n]
注意:我正在使用[^\r\n]而不是$因为$包括\r在比赛中.
然而,这并不十分工作,我希望它的方式.
这是我正在匹配的测试代码:
// remove whole line comments
bool broken = false; // remove partial line comments
if (broken == true)
{
return "BROKEN";
}
/* remove block comments
else
{
return "FIXED";
} // do not remove nested comments */ bool working = !broken;
return "NO COMMENT";
Run Code Online (Sandbox Code Playgroud)
块表达式匹配
/* remove block comments
else
{
return "FIXED";
} // do not …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用正则表达式从SQL语句中删除注释.
这个正则表达式几乎可以工作:
(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|'(?:[^']|'')*'|(--.*)
Run Code Online (Sandbox Code Playgroud)
除了最后一部分不能很好地处理" - "评论.问题是处理SQL字符串,用''分隔.
例如,如果我有
SELECT ' -- Hello -- ' FROM DUAL
Run Code Online (Sandbox Code Playgroud)
它不应该匹配,但它匹配.
这是在ASP/VBscript中.
我想过从右到左匹配,但我不认为VBScript的正则表达式引擎支持它.也试图摆弄负面的背后,但结果并不好.
题:
任何人都可以给我一个可以从SQL语句中删除单行注释的正则表达式(C#/ VB.NET)吗?
我的意思是这些评论:
-- This is a comment
Run Code Online (Sandbox Code Playgroud)
不是那些
/* this is a comment */
Run Code Online (Sandbox Code Playgroud)
因为我已经可以处理明星评论了.
我有一个小的解析器,当它们在行的开头时删除那些注释,但是它们也可以在代码之后的某个地方或者更坏的情况下,在SQL字符串中'hello --Test -- World'
也应该删除那些注释(除了SQL字符串中的那些注释)当然 - 如果可能的话).
令人惊讶的是我没有使用正则表达式.我会认为明星评论更难,但实际上,他们不是.
根据请求,这里我的代码删除/**/ - 样式注释(为了让它忽略SQL样式字符串,你必须用uniqueidentifier替换字符串(我使用4个标准),然后应用注释删除,然后应用string-backsubstitution.
static string RemoveCstyleComments(string strInput)
{
string strPattern = @"/[*][\w\d\s]+[*]/";
//strPattern = @"/\*.*?\*/"; // Doesn't work
//strPattern = "/\\*.*?\\*/"; // Doesn't work
//strPattern = @"/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/ "; // Doesn't work
//strPattern = @"/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/ "; // Doesn't work
// http://stackoverflow.com/questions/462843/improving-fixing-a-regex-for-c-style-block-comments
strPattern = @"/\*(?>(?:(?>[^*]+)|\*(?!/))*)\*/"; // Works !
string strOutput = System.Text.RegularExpressions.Regex.Replace(strInput, strPattern, string.Empty, System.Text.RegularExpressions.RegexOptions.Multiline);
Console.WriteLine(strOutput); …Run Code Online (Sandbox Code Playgroud) 我正在尝试找到一个可用于匹配 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*/
Run Code Online (Sandbox Code Playgroud)
应该变成:
select * from valid_sql1;
select * from valid_sql2;
select * from valid_sql3;
Run Code Online (Sandbox Code Playgroud)
任何帮助是极大的赞赏。