【问题标题】:Regular Expression to get comments in VB.Net source code在 VB.Net 源代码中获取注释的正则表达式
【发布时间】:2008-11-22 23:14:22
【问题描述】:

我在 vb.net 中有一个语法高亮功能。例如,我使用正则表达式匹配“!IF”,然后将其着色为蓝色。在我试图弄清楚如何做 cmets 之前,这很完美。

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

'this line is a comment
!if StackOverflow = "AWESOME" ''this is also a comment

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

您不需要该代码,但这里有一个 sn-p,以防万一。

    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

【问题讨论】:

    标签: regex vb.net


    【解决方案1】:

    类似的东西:

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

    应该给你第 n° 1 组中的注释行(部分行)

    其实你甚至不需要组

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

    如果它发现了什么,那就是评论。

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      正如 VonC 所提到的 - 这仅在您一次输入正则表达式时才有效。对于多行模式使用:

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

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

      【讨论】:

      • 它只有在你逐行应用时才有效。如果应用于多行,因为 '*' 是一个贪婪的量词,你的 '.'将越过行以仅匹配第二行的 cmets,而不是第一行。
      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2015-02-16
        • 1970-01-01
        • 1970-01-01
        • 2013-08-14
        • 2016-07-15
        • 2013-07-02
        • 2017-11-09
        • 1970-01-01
        相关资源
        最近更新 更多