我有一个定义了存储过程的文件,如下所示:
CREATE PROCEDURE [XXXX].[procedure_name_here]
到目前为止我的正则表达式是:
\.\[.*\]+.*
参考:http://rubular.com/r/Z0FiI78bqF
我需要一些帮助,因为它似乎没有100%正确。
注意:[xxxx]。 part可能存在也可能不存在(可选),但是CREATE必须在那里,否则它将是调用存储过程的另一个存储过程,我只是在寻找实际的定义。
答案 0 :(得分:2)
如果您可以在点之后立即依赖方括号之间的过程名称,那么您可以写
\.\[(.*?)\]
括号将为您捕获过程名称字符串。
如果点是可选的,或者您需要更多验证该行是过程定义,请使用
CREATE\s+PROCEDURE\s+(?:\[.*?\]\.)?\[(.*?)\]
答案 1 :(得分:-1)
SQL不是常规语言。这意味着无法使用正则表达式正确解析它。当然可以为SQL编写正确的解析器,并且可以为您关心的SQL子集编写正确的解析器。但只有正则表达式才能这样做。
您可以使用正则表达式作为猜测。但是,根据正则表达式的选择,你会得到两个误报,其中正则表达式表示某些文本是有效的SQL而不是错误,并且是否定的,其中正则表达式表示某些文本在实际上是无效的SQL完全有效。
所以你留下来:要么为SQL编写正确的解析器,要么编写一个能够做出最佳猜测的正则表达式 - 并确保编写所有SQL文件以传递该正则表达式。