Regex 要在存储过程中使用选项检测的正则表达式

Regex 要在存储过程中使用选项检测的正则表达式,regex,Regex,我一直在研究应用程序中的一些遗留代码,这些代码通过使用Regex检测SQL存储过程文本中的某些关键字,我发现了一个bug,由于我对Regex的了解有限,我无法完全纠正这个bug 基本上,我目前使用的正则表达式只适用于一种情况: (?<=\n\s*)(?<!with.*[\s\S]*)as 但是,它不应该用于此版本,但它当前确实返回匹配项: ALTER PROCEDURE [dbo].[p_obj_name_with_something] @username [nvarch

我一直在研究应用程序中的一些遗留代码,这些代码通过使用Regex检测SQL存储过程文本中的某些关键字,我发现了一个bug,由于我对Regex的了解有限,我无法完全纠正这个bug

基本上,我目前使用的正则表达式只适用于一种情况:

(?<=\n\s*)(?<!with.*[\s\S]*)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两边都有空格(或换行符),但我不能完全理解regex语法

有什么建议吗

查看此网站:

注意下面几行:

\s匹配任何空格,包括空格、制表符、表单提要等,相当于“[\f\n\r\t\v]”。
[^xyz]一个负数字符集。匹配任何未包含的字符。例如,“[^abc]”与“普通”中的“p”匹配。

所以……
[\s]+[[WITH][WITH][\s]+[^AS][^AS]]* it细分:
[\s]+是两边的空格
[[with]|[with][不区分大小写检查with
[[^AS].[^AS]]*不区分大小写的检查,只要不存在,就会匹配
希望这有帮助

尽管这不是一个真正的答案,但我发现更简单的方法是在存储过程中强制执行一些命名约定规则,并修改20个左右违反规则的名称


事实上,当正则表达式不是解决方案时,这种情况就出现了。

可变长度lookbehind???哪种语言?似乎只适用于.NET!这在一个内部C#winforms应用程序中使用。我一直在用意式浓缩咖啡来测试它@Ω你能详细说明一下吗?正如我说的,我对regex的了解非常有限。这不是regex的工作,对不起。。。
ALTER PROCEDURE [dbo].[p_obj_name_with_something] 
    @username [nvarchar](100) = null,
    @id [int] = null,
    @mode [int] = 0
WITH EXECUTE AS CALLER
AS
/*-------------------------------------------------------------------------