正则表达式查找没有命名参数的exec程序

时间:2017-07-05 17:26:53

标签: python regex tsql

我正在创建一个T-SQL脚本验证文件,因此它们遵循标准。 我需要一个正则表达式,它将在python中执行,它标识过程的执行而没有明确指示参数。

右:

exec schema.sp_procedure_name @parameterOne = 1, @parameter2 = 2
@parameter3 = 3, @parameter4 = 4

exec schema.sp_procedure_name
@parameterOne = 1, 
@parameter2 = 2
@parameter3 = 3,
@parameter4 = 4

错:

exec schema.sp_procedure_name 1, 2, 3, 4

exec schema.sp_procedure_name2
1,
2,
3,
4

我需要确定哪些是错的,所以正则表达式应该匹配第二种情况,我已经阅读了一些手册,讲义和正则表达式论坛,但我仍然无法想到能够创建这样的表达式到目前为止,我已经设法达到了目的,但你还没回答我:

(exec(ute)?\s*\w+\.\w+\s*)(\w+\s*\,|.*\w+\s*\,)

您能帮助我使用功能代码并解释它的工作原理吗?考虑到事情可能会出现断线,如上例所示,或者全部在同一条线上

1 个答案:

答案 0 :(得分:0)

这是一个开始,但这实际上是一个非常难的问题。

这个正则表达式是一个开始:

exec(ute)?\s+\S+\s+[^@]

exec(ute)?
\s+ whitespace
\S+ non-whitespace
\s+ whitespace
[^@]  - any character that is not @

这只会检查第一个参数是" @"

如果有人放置类似"架构的空间,它也可能会失败。 procedurename",我认为这是有效的SQL。人们也可能通过在SQL中添加注释来搞砸它。