当前位置:  开发笔记 > 后端 > 正文

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

如何解决《正则表达式在VB.Net源代码中获取注释》经验,为你挑选了1个好方法。

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

VonC.. 8

有点像:

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

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

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

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

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

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

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

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



1> VonC..:

有点像:

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

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

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

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

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

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

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

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

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有