我有一个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个部分。
有人可以请一些建议吗?感谢。
答案 0 :(得分:0)
在不区分大小写的模式下,以下模式应该适用于几乎所有语言:
SELECT\s(?:(?!FROM)[\s\S])*\sFROM
当SQL代码跨越多行时,这甚至可以工作。
或者,启用单行模式并使用点:SELECT\s(?:(?!FROM).)*\sFROM
。