Regex split by commas - not within parenthesis or single quotes
我有以下 SQL 语句,我试图将其拆分为列:
1 2 3 4 5 6 | select count(rtnotes.keyno) as value, ent.company as label, 'j-ChartDrillDown-406,'+CAST(ENT.ENTID AS CHAR(10)) AS link, dateadd(week, datediff(wk, 0, dateadd(wk,-5,getdate())), -1) as test ... |
我希望在 select 语句中将其拆分为 4 列:
我已经能够使用不在引号内的逗号分隔:
1 | ,(?=(?:[^']*'[^']*')*[^']*$) |
但我也需要忽略括号内的逗号(在这种情况下由于 dateadd 和 datediff 是嵌套括号)
https://regex101.com/r/UUNUF9/1/
这是您需要的正则表达式。
正则表达式:
1 | [^select][^\\s].+[\\(\\)]?[^,|\\s] |
例如,对于您的数据,请点击链接。
https://regex101.com/r/Zhk1JP/2
(评论太长)
除非您知道要解析的每个查询的嵌套括号的确切级别数,否则您不能。基本上是因为它变得与使用正则表达式解析 HTML 相同。
原因是这种情况下的括号就像 HTML 的开始和结束标记。此外,您必须确保处理诸如
然而,有一些像 SQL Parser 这样的项目可以帮助你实现你想要的。