regex从sql存储过程定义中提取参数

nsc4cvqm  于 2021-08-09  发布在  Java
关注(0)|答案(0)|浏览(174)

我试图提出一个regex模式来标识存储过程定义中的参数字符串。考虑到各种各样的可能性,它是相当迟钝的,但这里是我到目前为止所拥有的(为大小写不敏感和单行模式设置了全局标志):

(?:create proc.*?)((?:[@]\w+\s+[A-Za-z0-9_()]+(?:\s*=\s*\S+)?(?:\s*,\s*)?)+)(?:.*?with\s+(?:native_compilation|schemabinding|execute\s+as\s+\S+))?(?:[\s\)]*?as)

我已经用各种存储过程定义设置了几个单元测试——有参数或没有参数,有默认值或没有默认值等等——它似乎在所有情况下都能工作,只有一个例外(到目前为止我已经发现):

CREATE PROCEDURE [dbo].[sp_creatediagram]
(
    @diagramname    sysname,
    @owner_id       int = null,     
    @version        int,
    @definition     varbinary(max)
)
WITH EXECUTE AS 'dbo'
AS
BEGIN
    set nocount on
    ...

显然我希望第一个捕获组捕获所有四个参数。。。

@diagramname    sysname,
@owner_id       int = null,     
@version        int,
@definition     varbinary(max)

…但是由于某种原因,正则表达式搜索在第二个参数之后停止—特别是在包含默认赋值的参数之后—并且不会继续捕获其余的两个参数。第一个捕获组的结果如下:

@diagramname    sysname,
@owner_id       int = null,

我一点也不惊讶地知道我已经把这个复杂化了,但我确实觉得我真的很接近了。我想regex引擎的工作方式一定有一些我不太了解的地方。非常感谢您的帮助。非常感谢。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题