VBScript를 사용하여 정규식을 구성하여 주석 처리되지 않은 VBScript 메서드 선언을 추출하려고합니다. 예를 들어, 다음과 같은 방법을 고려하십시오VBScript 정규식 : 부정적인 Lookbehind : 일치하는 VBScript 메서드 선언에 없음
Public Function thisContainsACommentedRoutine()
'' Public Sub myRoutine1()
'' print "hello"
'' End Sub
thisContainsACommentedRoutine = 1 + 1
End Function
'Public Sub myRoutine2()
' print "routine2"
'End Sub
Private Sub sub1()
print "sub1"
End Sub
을 나는 다음과 같은 방법을 선언 추출 할 :
Public Function thisContainsACommentedRoutine()
Private Sub sub1()
나는 많은 다른 사람과 함께 다음과 같은 정규 표현식을 (사용하여 시도
, 나는 부정적으로 연구 노력) 비하인드 모습,하지만 그들은 VBScript로 지원되지 않습니다, 그래서 나는 또한 부정적인 모습 이것은 미리 시도 :
(?!')(Public|Private) (Function|Sub) .*
http://regexpal.com를 사용
있지만, 모든 방법 선언을 추출하고, 메소드 선언 앞에 주석 문자가 포함 된 행을 무시하고 싶습니다.
위의 첫 번째 코드 블록의 코드는 전체 문자열로 반환되며 VBScript의 정규 표현식 개체를 사용하여 메서드 전체에 패턴을 실행합니다. 또한 시간을 절약하기 위해 한 번에 한 줄씩 처리하지 않아도됩니다.
비슷한 질문 (Regular Expression Negative Lookbehind Alternative for VBScript)을 찾으려고했지만 어쨌든 부정적인 lookahead 정규 표현식은 여전히 주석 처리 된 메소드를 포착합니다.
제안 사항?
EDIT : .NET의 정규 표현식 개체를 대신 사용하고 있는데 부정적인 표정 어설 션을 지원합니다. 지금은 다음과 같은 정규 표현식을 사용하고 있습니다 : 그러나
\s*?(?<!')\s*?(Public|Private) (Function|Sub) .*
을, 나는 아직도 잘못 일치를 받고 있어요 :
Public Function thisContainsACommentedRoutine()
Public Sub myRoutine1()
Private Sub sub1()
경기를 "공공 서브 myRoutine1()"게재되어서는 안된다; 메서드 앞의 공백 수에 관계없이 메소드 선언 앞에 적어도 하나의 주석 문자 (줄의 아무 곳이나)가 있으면 메서드가 일치하지 않게해야합니다.
는 사실 내 대답을 얻기 위해 다음과 같은 정규 표현식을 사용할 수 있었다 : '(공공 | 개인) (<('+) \는 *이야?!?) (기능 | 서브) *' . 하지만 VBScript에 대한 정규 표현식 개체의 MultiLine 속성에 대해 알지 못했습니다. 감사! – user2174745