将SQL与子查询匹配的正则表达式,用括号表示

时间:2013-06-20 12:43:28

标签: c# sql regex parsing recursion

我在这里有关于SQL问题的正则表达式。对于表单的SQL联合查询:

Select a From (subquery1) union (subquery2)

我虽然这是一个简单的正则表达式来匹配的From子句中,我有以下正则表达式:

\((?<subquery1>.*)\) union \((?<subquery2>.*)\)

但后来我发现事情可以递归,2子查询也可以再次包含联合案例,例如:

(
(select a from b) union (select x from b)
) union (
(select a from b) union (select x from b)
)

这完全弄乱了我的正则表达式捕获,如果它不贪婪,则subquery1将捕获第一个联合而不是第二个联合,如果它是贪婪的话它将捕获所有内容直到第三个联合。我还试过加入非贪心的?运营商既捕获条款,但没有运气。

我需要启发,非常感谢

PS:我有一个自定义数据库位于MS SQL Server 2012之上,我需要解析标准的SQL select查询,并对表名做了一些修改;对几列进行数值运算。从而生成修改但仍然标准的SQL查询,并将其传递给SQL服务器

0 个答案:

没有答案