2012-11-08 1 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 

지금까지 모두 3 경기 다음을 보유하고 있습니다.

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

의견이없는 첫 번째 줄과 일치시켜야합니다. 나는 그것을 이해할 수 없다.

+0

너의 목적은 과잉 일지 모르지만 어쨌든 MS Roslyn을 고려해 보셨습니까? – 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

나는 이것을 추가하여 작동시킬 수 있었다. (?

+0

@Brett Emerson - 고유 한 RegEx의 시작 부분에^\ s *를 추가하는 것만으로도 더 자세히 생각해 볼 수 있습니다. 이렇게하면 선의 시작 부분에서 딤 (Dim)까지 공백 만 일치시킵니다. –

관련 문제