0

我有一个定义了存储过程的文件,如下所示:

CREATE        PROCEDURE [XXXX].[procedure_name_here]

到目前为止,我的正则表达式是:

\.\[.*\]+.*

参考:http ://rubular.com/r/Z0FiI78bqF

我需要一些帮助,因为它似乎不是 100% 正确的。

注:[xxxx]。部分可能存在也可能不存在(可选),但必须存在 CREATE 一词,否则它将是另一个调用存储过程的存储过程,我只是在寻找实际定义。

4

2 回答 2

2

如果您可以依靠点后立即在方括号之间的过程名称,那么您可以编写

\.\[(.*?)\]

括号将为您捕获过程名称字符串。

如果点是可选的,或者您需要更多验证该行是过程定义,则使用

CREATE\s+PROCEDURE\s+(?:\[.*?\]\.)?\[(.*?)\]
于 2012-05-23T18:40:20.127 回答
-1

SQL 不是常规语言。这意味着它不能用正则表达式正确解析。为 SQL 编写正确的解析器当然是可能的,当然也可以为您关心的 SQL 子集编写正确的解析器。但是仅使用正则表达式是不可能的。

您可以使用正则表达式作为猜测。但是,根据正则表达式的选择,您会得到误报(正则表达式表示某些文本不是有效的 SQL)和误报(正则表达式表示某些文本实际上是无效的 SQL)完全有效。

所以你只剩下:要么为 SQL 编写一个正确的解析器,要么编写一个能够做出最佳猜测的正则表达式——并确保你所有的 SQL 文件都被编写为传递该正则表达式。

于 2012-05-23T18:49:31.163 回答