正規表現を使用してSQLストアドプロシージャのテキスト内の特定のキーワードを検出するアプリケーションのレガシーコードに取り組んでいますが、正規表現に関する知識が限られているため、修正できないバグを見つけました。
基本的に、私が現在持っている正規表現は、1つの場合を除いてすべて機能します。
(?<=\n\s*)(?<!with.*[\s\S]*)as
このバージョンのストアドプロシージャで一致するものが返されるはずです。
ALTER PROCEDURE [dbo].[p_obj_name_with_something]
@username [nvarchar](100) = null,
@id [int] = null,
@mode [int] = 0
AS
/*-------------------------------------------------------------------------
ただし、このバージョンでは使用できませんが、現在は一致が返されます。
ALTER PROCEDURE [dbo].[p_obj_name_with_something]
@username [nvarchar](100) = null,
@id [int] = null,
@mode [int] = 0
WITH EXECUTE AS CALLER
AS
/*-------------------------------------------------------------------------
ASキーワードの前にキーワードWITHが見つからない場合に一致させたいのですが、ストアドプロシージャの名前またはパラメータ内の単語を許可します。
検出が機能すると思う方法は、キーワードWITHの両側に空白(または改行)がある場合ですが、正規表現の構文を完全に理解することはできません。
助言がありますか?