2012-11-08 101 views
2

我想用RegEx解析一些代码,并且我需要匹配任何包含未被注释掉的代码的行。正则表达式查找未注释的行(或匹配行不包含')

例如:

Public Function SomeFunc(SomeVar As Integer) As Boolean 
       Dim APSHSwitch, objDB, sql, iCnt, vADOConn, result As New Object 
    '''  Dim BPSHSwitch, objDB, sql, iCnt, vADOConn, result As New Object 
       'Dim CPSHSwitch, objDB, sql, iCnt, vADOConn, result As New Object\ 
End Function 

我需要匹配:

Dim APSHSwitch, objDB, sql, iCnt, vADOConn, result As New Object 

到目前为止,我有以下的,它匹配所有的三个。

Dim\s 
(?<varNames>([A-Z0-9]+(,\s){1})+[A-Z0-9]+) 
\sAs\s 
(?<newKeyWord>(New\s)?) 
(?<varType>([A-Z]+)) 

我只需要匹配没有评论的第一行。我无法弄清楚。

+0

它可能是为你的目的矫枉过正,但无论如何,你有没有考虑过MS罗斯林? – Vagaus

+0

甚至NRefactory? – Vagaus

+0

我以前没有听说过Roslyn。我刚刚读到。对于我们的直接目的来说这太过于夸张,但我们在将来会做一些重大的重构。这可能有帮助。谢谢! –

回答

0

我可以用得到这个匹配以下RegEx with multiline ON

(?<!^\s*\'+\s*) 
Dim\s 
(?<varNames>([A-Z0-9]+(,\s){1})+[A-Z0-9]+) 
\sAs\s 
(?<newKeyWord>(New\s)?) 
(?<varType>([A-Z]+)) 

感谢LastCoder!

0

首先,如果您使用/ * * /或任何嵌套注释,我甚至不会尝试正则表达式。

但是,如果您只是寻找以"'''"开头的行,那么我会匹配评论行而不是未评论的行,然后相应地调整您的条件。

脱颖而出例如

"^\s*'''\s*.*$ 

将匹配注释行

+0

我需要忽略注释行。我正在编写代码清理程序。我们在这里有一个非常大而且非常难看的代码库。因此,这是识别代码中变量的一小部分逻辑,因此我们可以自动进行一些改进,例如早期绑定。 –

+0

@BrettEmerson,然后忽略匹配正则表达式的行。 –

+0

这是一个选项,但代码目前结构上处理匹配使这不太理想。 –

0

隐藏的外观添加否定你的正则表达式的开头

(?<!^\s*\') 

Explanation: The line doesN'T (?<!) start with (^) any amount of white space (\s*) and an apostrophe (\'). 
+0

这似乎并不奏效。所有3行都匹配。我会尝试使用这种方法来看看我是否可以修复它并在我做的时候报告。 –

+0

我可以通过添加以下内容来实现它:(?<!^ \ s * \'+ \ s *)我还需要打开多行。我会发布这个答案。感谢您的帮助! –

+0

@Brett Emerson - 进一步思考,在您的具体情况下,只需在原始RegEx中添加^ \ s *即可。这样你强制它只匹配从行首到Dim的空白区域。 –

相关问题