相关疑难解决方法(0)

正则表达式从C#剥离行注释

我正在编写一个例程来从一些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)

.net c# regex

40
推荐指数
3
解决办法
4万
查看次数

正则表达式从SQL语句中删除注释

我正在尝试使用正则表达式从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的正则表达式引擎支持它.也试图摆弄负面的背后,但结果并不好.

regex sql vbscript

6
推荐指数
2
解决办法
6174
查看次数

正则表达式删除单行SQL注释( - )

题:

任何人都可以给我一个可以从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)

.net c# regex sql vb.net

2
推荐指数
1
解决办法
5701
查看次数

正则表达式查找 sql 注释

我正在尝试找到一个可用于匹配 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)

任何帮助是极大的赞赏。

regex

2
推荐指数
1
解决办法
2565
查看次数

标签 统计

regex ×4

.net ×2

c# ×2

sql ×2

vb.net ×1

vbscript ×1