Regex 在VB.Net源代码中获取注释的正则表达式

Regex 在VB.Net源代码中获取注释的正则表达式,regex,vb.net,Regex,Vb.net,我在vb.net中有一个语法突出显示功能。例如,我使用正则表达式匹配“!IF”,然后将其涂成蓝色。在我试图弄明白如何做评论之前,这一切都是完美的 我写这篇评论的语言可以是,如果行以单引号开头,或者行中的任何地方都有两个单引号 'this line is a comment !if StackOverflow = "AWESOME" ''this is also a comment 现在我知道如何查看它是否以一行^开头,但我需要将字符串一直返回到行的末尾,这样我可以将整个注释涂成绿色,而不仅仅是

我在vb.net中有一个语法突出显示功能。例如,我使用正则表达式匹配“!IF”,然后将其涂成蓝色。在我试图弄明白如何做评论之前,这一切都是完美的

我写这篇评论的语言可以是,如果行以单引号开头,或者行中的任何地方都有两个单引号

'this line is a comment
!if StackOverflow = "AWESOME" ''this is also a comment
现在我知道如何查看它是否以一行^开头,但我需要将字符串一直返回到行的末尾,这样我可以将整个注释涂成绿色,而不仅仅是单引号

您不应该需要这些代码,但这里有一个代码片段,以防万一

    For Each pass In frmColors.lbRegExps.Items
        RegExp = System.Text.RegularExpressions.Regex.Matches(LCase(rtbMain.Text), LCase(pass))
        For Each RegExpMatch In RegExp
            rtbMain.Select(RegExpMatch.Index, RegExpMatch.Length)
            rtbMain.SelectionColor = ColorTranslator.FromHtml(frmColors.lbHexColors.Items(PassNumber))
        Next
        PassNumber += 1
    Next

大致如下:

^(\'[^\r\n]+)$|(''[^\r\n]+)$
应向您提供第1组中的注释行(部分行)

实际上,你们甚至不需要团队

^\'[^\r\n]+$|''[^\r\n]+$
如果它发现了什么,那就是一条评论

"(^'|'').*$"
如果只逐行应用Boaz提到的内容(这可能是您的情况)。
对于多行检测,必须确保避免使用“Dotall”模式,其中“.”还表示\r和\n字符。否则,该模式将完全匹配您的两条线


这就是为什么我通常更喜欢
[^\r\n]
而不是“.”:它避免了对模式的任何依赖。即使在“Dotall”模式下,它仍然有效,并避免在下一行尝试任何匹配。

尽管上述方法有效,但您可以简化它:

"(^'|'').*$"
正如VonC所提到的,只有在一次只给Regex一行数据时,这才有效。对于多行模式使用:

"(^'|'').*?$"

那个?使*运算符不贪婪,强制正则表达式匹配一行。

使用正则表达式模式:REM((\t|).$|$)|^\[^\r\n]+$|'[^\r\n]+$


查看更多信息

只有逐行应用它,它才有效。如果应用于多行,由于“*”是一个贪婪的量词,您的“.”将越过该行,只匹配第二行的注释,而不是第一行的注释。