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

时间:2008-11-22 23:14:22

标签: regex vb.net

我在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

3 个答案:

答案 0 :(得分:8)

有些事情:

^(\'[^\r\n]+)$|(''[^\r\n]+)$

应该在组n°1

中给出注释行(部分行)

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

^\'[^\r\n]+$|''[^\r\n]+$

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

"(^'|'').*$"
如果只是逐行应用(可能是你的情况),Boaz提到的

会起作用 对于多线检测,您必须确保避免使用'Dotall'模式,其中'。'也代表\ r和\ n字符。否则该模式将完全匹配您的两条线。

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

答案 1 :(得分:1)

虽然上述方法可行,但您可以简化它:

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

正如VonC所提到的 - 这只有在你一次为Regex提供一行时才有效。对于多线模式使用:

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

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

答案 2 :(得分:0)

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

查看更多https://code.msdn.microsoft.com/How-to-find-code-comments-9d1f7a29/

相关问题