我有想要美化的 SQL 代码文件,但在区分代码的某一行/部分是字符串还是注释时遇到了麻烦。
我当前的过程是我对文件进行模式/匹配器搜索,并使用正则表达式N?'([']{2}|[^'])*+'(?!')
和注释提取字符串\s*--.*?\n|/\*.*?\*/
,并将它们放入各自的存储数组中以避免格式化它们。
例子:
WHERE y = 'STRING'
->WHERE y = THIS_IS_A_STRING
和strings[0] = 'STRING'
SELECT x --do not format
->SELECT x THIS_IS_A_COMMENT
和comments[0] = --do not format
在美化所有内容之后,我会从数组中搜索THIS_IS_A_STRING
并THIS_IS_A_COMMENT
恢复它们各自的值。
我遇到的问题是注释中是否包含撇号,或者 SQL 字符串中是否包含双破折号。我可以解决一个问题,但它会导致另一个问题,这取决于我是选择先保留字符串还是注释。
例如:
--Don't format this
首先保留字符串将'nt format this
一直匹配到下一个'
,(由于能够拥有多行字符串)。
另一方面,如果我选择先保留评论:
SELECT x FROM y WHERE z = '--THIS_IS_AS_STRING--'
,它将检测--
并存储所有内容,直到下一个换行符进入 comments 数组。
任何帮助将不胜感激。
编辑:我知道我可能应该用 SQL 解析器来做这件事,但我一直在用正则表达式来做这件事,这是我需要完成的最后一步