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

The*_*nja 3 regex vb.net

我在vb.net中有一个语法高亮功能.我使用正则表达式匹配"!IF",然后将其着色为蓝色.这很有效,直到我试图弄清楚如何做评论.

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

'this line is a comment
!if StackOverflow = "AWESOME" ''this is also a comment
Run Code Online (Sandbox Code Playgroud)

现在我知道如何查看它是否以单行开头^'但我需要将字符串一直返回到行尾,这样我就可以将整个注释的颜色设置为绿色,而不仅仅是单引号.

您不应该需要代码,但这里是一个片段,以防它有所帮助.

    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
Run Code Online (Sandbox Code Playgroud)

Von*_*onC 8

有点像:

^(\'[^\r\n]+)$|(''[^\r\n]+)$
Run Code Online (Sandbox Code Playgroud)

应该在组n°1中给出注释行(部分行)

实际上,你甚至不需要小组

^\'[^\r\n]+$|''[^\r\n]+$
Run Code Online (Sandbox Code Playgroud)

如果找到了什么,那就是评论.

"(^'|'').*$"
Run Code Online (Sandbox Code Playgroud)

Boaz提到的如果只是逐行应用(可能是你的情况)就会起作用.
对于多线检测,您必须确保避免使用'Dotall'模式,其中'.' 也代表\ r和\n字符.否则该模式将完全匹配您的两条线.

这就是为什么我通常更喜欢[^\r\n]".":它避免了对模式模式的任何依赖.即使在'Dotall'模式下,它仍然可以工作并避免在下一行尝试任何匹配.