Regex 在VB.Net源代码中获取注释的正则表达式
我在vb.net中有一个语法突出显示功能。例如,我使用正则表达式匹配“!IF”,然后将其涂成蓝色。在我试图弄明白如何做评论之前,这一切都是完美的 我写这篇评论的语言可以是,如果行以单引号开头,或者行中的任何地方都有两个单引号Regex 在VB.Net源代码中获取注释的正则表达式,regex,vb.net,Regex,Vb.net,我在vb.net中有一个语法突出显示功能。例如,我使用正则表达式匹配“!IF”,然后将其涂成蓝色。在我试图弄明白如何做评论之前,这一切都是完美的 我写这篇评论的语言可以是,如果行以单引号开头,或者行中的任何地方都有两个单引号 'this line is a comment !if StackOverflow = "AWESOME" ''this is also a comment 现在我知道如何查看它是否以一行^开头,但我需要将字符串一直返回到行的末尾,这样我可以将整个注释涂成绿色,而不仅仅是
'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
大致如下:
^(\'[^\r\n]+)$|(''[^\r\n]+)$
应向您提供第1组中的注释行(部分行)
实际上,你们甚至不需要团队
^\'[^\r\n]+$|''[^\r\n]+$
如果它发现了什么,那就是一条评论
"(^'|'').*$"
如果只逐行应用Boaz提到的内容(这可能是您的情况)。对于多行检测,必须确保避免使用“Dotall”模式,其中“.”还表示\r和\n字符。否则,该模式将完全匹配您的两条线
这就是为什么我通常更喜欢
[^\r\n]
而不是“.”:它避免了对模式的任何依赖。即使在“Dotall”模式下,它仍然有效,并避免在下一行尝试任何匹配。尽管上述方法有效,但您可以简化它:
"(^'|'').*$"
正如VonC所提到的,只有在一次只给Regex一行数据时,这才有效。对于多行模式使用:
"(^'|'').*?$"
那个?使*运算符不贪婪,强制正则表达式匹配一行。使用正则表达式模式:REM((\t|).$|$)|^\[^\r\n]+$|'[^\r\n]+$
查看更多信息只有逐行应用它,它才有效。如果应用于多行,由于“*”是一个贪婪的量词,您的“.”将越过该行,只匹配第二行的注释,而不是第一行的注释。