用于提取存储过程名称的更快的Regex表达式

本文关键字:Regex 表达式 提取 存储过程 用于 | 更新日期: 2023-09-27 18:09:48

我有这个存储过程和一个表名(例如:" userCompanyGrouping_tbl ")。我必须提取使用给定表名的存储过程名称。
我使用正则表达式CREATE PROCEDURE''s*(?<proc_name>.*|'n)(.|'n)*userCompanyGrouping_tbl从下面给定的样例.sql文件中提取存储过程,它执行得非常慢。

我必须在GB大小的目录中执行多个文件的搜索。结果是非常缓慢的。我需要一个更快的正则表达式来提取过程名称。

我正在使用c#正则表达式引擎。

 USE [BI]
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    SET ANSI_PADDING ON
    GO
    IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[ActiveUsersRelatedCompanies_prc]') AND type in (N'P', N'PC'))
    DROP PROCEDURE [dbo].[ActiveUsersRelatedCompanies_prc]
    GO
    CREATE PROCEDURE  [dbo].[ActiveUsersRelatedCompanies_prc]  
        @Usercompanyid INT
    AS     
    Begin  
    select * 
    FROM dbo.ActiveUsersRelatedCompanies_tbl (NOLOCK)
    WHERE userCompanyId in (
            select  ucg2.userCompanyId
            from    `userCompanyGrouping_tbl` u
                    inner join userCompanyGrouping_tbl ucg2
                        on isNull(u.subParentCompanyId,u.parentCompanyId) = 
                            (case when u.subParentCompanyId is not null then ucg2.subParentCompanyId 
                                else ucg2.parentCompanyId end)
            where   u.userCompanyId = @userCompanyID
    )       
    order by userCompanyName, userGroup, fullName
    END

用于提取存储过程名称的更快的Regex表达式

下面的正则表达式会更好:

^'s*[^(--)]{0}(CREATE +PROCEDURE|ALTER +PROCEDURE)'s+(?<ParentProcName>('w|_|'[|']|'.)*)

"ParentProcName"将捕获创建或更改的存储过程的名称