我在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'模式下,它仍然可以工作并避免在下一行尝试任何匹配.
有点像:
^(\'[^\r\n]+)$|(''[^\r\n]+)$
应该在组n°1中给出注释行(部分行)
实际上,你甚至不需要小组
^\'[^\r\n]+$|''[^\r\n]+$
如果找到了什么,那就是评论.
"(^'|'').*$"
Boaz提到的如果只是逐行应用(可能是你的情况)就会起作用.
对于多线检测,您必须确保避免使用'Dotall'模式,其中'.' 也代表\ r和\n字符.否则该模式将完全匹配您的两条线.
这就是为什么我通常更喜欢[^\r\n]
".":它避免了对模式模式的任何依赖.即使在'Dotall'模式下,它仍然可以工作并避免在下一行尝试任何匹配.