我一直在研究應用程序中的一些遺留代碼,它使用Regex檢測SQL存儲過程的文本中的某些關鍵字,並且發現了一個我無法完成的錯誤由於我對正則表達式的瞭解有限,所以是正確的。正則表達式在存儲過程中檢測WITH選項
基本上,我目前在所有的作品,但一個情況下,正則表達式:
(?<=\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
/*-------------------------------------------------------------------------
我想要一個匹配,當keywor d與不是之前發現的AS關鍵字,但它會允許存儲過程的名稱或參數內的單詞。
我認爲檢測的工作方式是,如果關鍵字WITH有空白(或換行符)的任何一邊,但我不能完全弄清楚正則表達式的語法。
有什麼建議嗎?
變長lookbehind ??? – 2012-07-27 18:00:13
這是哪種語言?似乎只適用於.NET! – Cylian 2012-07-27 18:01:09
這用於內部C#winforms應用程序。我一直在使用Espresso來測試它。 – XN16 2012-07-27 18:02:30