如何用正则匹配行数≥1000的SQL存储过程定义(排除内部关键词干扰)
解决匹配至少1000行SQL存储过程的正则问题
你的核心问题在于原正则会贪婪地包含中间出现的CREATE PROCEDURE关键词,导致匹配范围超出目标存储过程。下面是修正后的方案,能精准匹配满足行数要求的存储过程:
修正后的正则表达式
(?si)CREATE PROCEDURE(?:(?!CREATE PROCEDURE).*\n){999,}(?=CREATE PROCEDURE|\Z)
详细解释
(?si):启用两个关键模式:s(DOTALL):让.匹配包括换行符在内的所有字符i(CASE_INSENSITIVE):忽略大小写,兼容create procedure这类小写写法
CREATE PROCEDURE:精准匹配存储过程的起始标识(?:(?!CREATE PROCEDURE).*\n){999,}:非捕获组,重复至少999次:(?!CREATE PROCEDURE):负向前瞻,确保当前行开头不是另一个存储过程的起始,完美避免误包含中间的存储过程.*\n:匹配当前整行内容(包括换行符)- 用999是因为起始行已经算第1行,加上999行就达到至少1000行的要求
(?=CREATE PROCEDURE|\Z):正向前瞻,匹配结束边界:CREATE PROCEDURE:下一个存储过程的起始\Z:文件末尾(EOF)
使用说明
这个正则在支持PCRE语法的工具/环境中都能正常工作(比如常见的文本编辑器、正则测试工具)。它会精准捕获所有行数≥1000的存储过程,完全不会把中间的其他存储过程包含进来。
内容的提问来源于stack exchange,提问作者Raul
相关产品推荐
相关产品推荐

