从DDL获取存储过程名称的无限循环[关闭]
Posted
技术标签:
【中文标题】从DDL获取存储过程名称的无限循环[关闭]【英文标题】:Infinite loop getting stored procedure name from DDL [closed] 【发布时间】:2015-02-11 07:09:14 【问题描述】:我有这个正则表达式来检查 DLL 是否有程序
var expReg = "(((ALTER|CREATE|OR|REPLACE| )*)+)?PROCEDURE.*";
return (Regex.IsMatch(textProcedure, expReg, RegexOptions.IgnoreCase)
我将它与 SQL Server 或 Oracle DLL 一起使用。
有时有效,有时有无限循环。
有什么问题?非常感谢任何帮助。
【问题讨论】:
你想匹配什么?请提供一些示例字符串和预期结果。 Why my Python regular expression pattern run so slowly?的可能重复 【参考方案1】:(X*)+
形式的模式在正则表达式中是一个非常糟糕的主意,因为它可能导致catastrophic backtracking。这种模式迫使正则表达式引擎在失败之前尝试所有可能的组合。这可能需要很长时间。
在你的情况下,我认为*
不是必需的,只需使用:
(?:ALTER|CREATE|OR|REPLACE|\s)+PROCEDURE
我也删除了?
,否则仅仅存在PROCEDURE
这个词就足以匹配模式。
这可以进一步简化为:
(?:ALTER|CREATE|REPLACE)\s+PROCEDURE
因为匹配字符串CREATE OR REPLACE PROCEDURE
中的REPLACE PROCEDURE
就足够了。
【讨论】:
谢谢卢卡斯。您发送了一个解决方案,以及我的常规表达不佳的原因。我认为您的解决方案可以帮助一些人。以上是关于从DDL获取存储过程名称的无限循环[关闭]的主要内容,如果未能解决你的问题,请参考以下文章