コメントアウトされていない VBScript メソッド宣言を抽出するために、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 の正規表現オブジェクトを使用して、メソッドの文字列全体に対してパターンを実行しています。また、時間を節約するために一度に 1 行ずつ処理する必要はありません。
同様の質問を調べてみました ( Regular Expression Negative Lookbehind Alternative for VBScript ) が、どういうわけか私が使用している否定先読み正規表現がまだコメント アウトされているメソッドを取得しています。
助言がありますか?
編集:代わりに .NET の正規表現オブジェクトを使用しており、否定的な後読みアサーションをサポートしています。現在、次の正規表現を使用しています。
\s*?(?<!')\s*?(Public|Private) (Function|Sub) .*
ただし、まだ間違った一致が得られます:
Public Function thisContainsACommentedRoutine()
Public Sub myRoutine1()
Private Sub sub1()
一致する "Public Sub myRoutine1()" は表示されません。メソッドの前のスペースの数に関係なく、メソッド宣言の前に少なくとも 1 つのコメント文字 (行の任意の場所) がある場合、メソッドを一致させたくありません。