正则表达式在具有0个或更多UNION的单个语句中捕获多组SELECT查询?

时间:2018-04-09 14:43:01

标签: regex lookahead

我有一个SQL查询列表,其范围可以是简单的

  

SELECT * from ABC

复杂的

  

SELECT A,B,C来自 ABC其中Z = 5且T = 10 UNION SELECT * from GHI其中i = 100 UNION SELECT X,Y来自 XYZ

我想使用正则表达式捕获粗体部分。目前,我有(SELECT[\s]*.*from[\s]*),但这会将第二个查询视为单个SELECT查询,即SELECT .... from XYZ,而我需要它来查找上面突出显示的3个部分。

有人可以请一些建议吗?感谢。

1 个答案:

答案 0 :(得分:0)

在不区分大小写的模式下,以下模式应该适用于几乎所有语言:

SELECT\s(?:(?!FROM)[\s\S])*\sFROM

当SQL代码跨越多行时,这甚至可以工作。

Demo

或者,启用单行模式并使用点:SELECT\s(?:(?!FROM).)*\sFROM