我在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
答案 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/