我正在尝试查找存储过程文件中调用的存储过程的所有名称。有效的存储过程调用是:
call my_stored_procedure(param1, param2)
我的策略 [基于我有限的正则表达式知识] 是寻找类似于以下内容的独特事件:调用 my_stored_procedure(
例外情况是在“调用”之前在行首有双破折号“--”注释的那些。
我的想法是,一旦我得到上面的字符串,我可以通过使用“call”和“(”作为我在一些后期处理中所做的分隔符来找到实际的存储过程名称。
在存储过程文件中,此调用可能有多种变体。每个完整单词之间可以有多个空格和/或制表符。
call my_stored_procedure(param1, param2)
call my_stored_procedure(param1, param2)
call my_stored_procedure (param1, param2)
call my_stored_procedure (
param1, param2)
call my_stored_procedure ( param1, param2 )
-- call my_stored_procedure (param1, param2)
--call my_stored_procedure (param1, param2)
--call my_stored_procedure
-- jsmith call my_stored_procedure (param1, param2)
我正在使用 ASP.Net Regex 引擎,到目前为止,这就是我所拥有的:
Regex rgxFindStoredProcedures = new Regex(@"(?<!.*--? *)(call|CALL)\s*([A-Za-z0-9-_\.]+)(\s*)\(",
RegexOptions.Multiline | RegexOptions.IgnoreCase);
上面的正则表达式似乎有效,我找到了所有匹配项并排除了前 3 个已注释掉的调用。但是,它包括最后评论的电话:
-- jsmith call my_stored_procedure (param1, param2)
有没有人知道如何过滤掉最后一个注释掉的电话?我的想法是在里面设置一个条件
(?<!.*--? * some_condition_here)
如果 -- 不等于“call”之后有单词,它会丢弃匹配,但我不太清楚如何为这种情况构建正则表达式。
任何帮助是极大的赞赏。