正则表达式在具有 0 个或多个 UNION 的单个语句中捕获多组 SELECT 查询?
Regex to capture multiple groups of SELECT queries in a single statement with 0 or more UNIONs?
我有一个 SQL 查询列表,范围从简单的
SELECT * from ABC
像
这样复杂的
SELECT A,B,C from ABC Where Z=5 and T=10 UNION SELECT * from GHI Where i=100 UNION SELECT X,Y from XYZ
我想使用正则表达式捕获粗体部分。目前,我有 (SELECT[\s]*.*from[\s]*)
,但这将第二个查询视为单个 SELECT 查询,即 SELECT .... from XYZ
,而我需要它来查找上面突出显示的 3 个部分。
有好心人可以给点建议吗?谢谢。
以下模式在 case-insensitive 模式下几乎适用于任何语言:
SELECT\s(?:(?!FROM)[\s\S])*\sFROM
这甚至在 SQL 代码分布在多行时也有效。
或者,启用 single-line 模式并只使用一个点:SELECT\s(?:(?!FROM).)*\sFROM
.
我有一个 SQL 查询列表,范围从简单的
SELECT * from ABC
像
这样复杂的SELECT A,B,C from ABC Where Z=5 and T=10 UNION SELECT * from GHI Where i=100 UNION SELECT X,Y from XYZ
我想使用正则表达式捕获粗体部分。目前,我有 (SELECT[\s]*.*from[\s]*)
,但这将第二个查询视为单个 SELECT 查询,即 SELECT .... from XYZ
,而我需要它来查找上面突出显示的 3 个部分。
有好心人可以给点建议吗?谢谢。
以下模式在 case-insensitive 模式下几乎适用于任何语言:
SELECT\s(?:(?!FROM)[\s\S])*\sFROM
这甚至在 SQL 代码分布在多行时也有效。
或者,启用 single-line 模式并只使用一个点:SELECT\s(?:(?!FROM).)*\sFROM
.