SSMS RegEx 替换为可选部分
SSMS RegEx replace with optional part
我试图将列分隔成单独的行形式 "select"、"group by" 和 "order by" 关键字。如何使前面的空格可选?
Find(需要前置空格):
^{[ ]+}{(SELECT|GROUP BY|ORDER BY)} {[#_a-z0-5]+}
替换为: \n
原始查询(只是一个没有逻辑的例子):
SELECT myColumn
FROM (
SELECT myColumn
FROM foo
GROUP BY myColumn
ORDER BY myColumn
) as bar
GROUP BY myColumn
ORDER BY myColumn
结果(主查询失败):
SELECT myColumn
FROM (
SELECT
myColumn
FROM foo
GROUP BY
myColumn
ORDER BY
myColumn
) as bar
GROUP BY myColumn
ORDER BY myColumn
预期结果:
SELECT
myColumn
FROM (
SELECT
myColumn
FROM foo
GROUP BY
myColumn
ORDER BY
myColumn
) as bar
GROUP BY
myColumn
ORDER BY
myColumn
对您的正则表达式进行的一些小改动为您的示例提供了正确的结果:
{^:b*}{(SELECT|GROUP BY|ORDER BY)} {.+}
:b
匹配 space 或制表符。 *
匹配零次或多次出现(因此将匹配行开头的关键字)。
我不明白对列列表名称进行限制的目的,因此将其替换为通用的 .+
,这似乎更可靠。
如果不依赖关键字和列列表之间的单个 space,此解决方案可能会变得更加稳健:
{^:b*}{(SELECT|GROUP BY|ORDER BY)}:b+{.+}
我认为你应该在 [ ] 之后使用 * 量词来使前面的空格可选。所以表达式将是
^{[ ]*}{(SELECT|GROUP BY|ORDER BY)} {[#_a-z0-5]+}
并替换为您正在使用的相同模式。
\n
我试图将列分隔成单独的行形式 "select"、"group by" 和 "order by" 关键字。如何使前面的空格可选?
Find(需要前置空格):
^{[ ]+}{(SELECT|GROUP BY|ORDER BY)} {[#_a-z0-5]+}
替换为: \n
原始查询(只是一个没有逻辑的例子):
SELECT myColumn
FROM (
SELECT myColumn
FROM foo
GROUP BY myColumn
ORDER BY myColumn
) as bar
GROUP BY myColumn
ORDER BY myColumn
结果(主查询失败):
SELECT myColumn
FROM (
SELECT
myColumn
FROM foo
GROUP BY
myColumn
ORDER BY
myColumn
) as bar
GROUP BY myColumn
ORDER BY myColumn
预期结果:
SELECT
myColumn
FROM (
SELECT
myColumn
FROM foo
GROUP BY
myColumn
ORDER BY
myColumn
) as bar
GROUP BY
myColumn
ORDER BY
myColumn
对您的正则表达式进行的一些小改动为您的示例提供了正确的结果:
{^:b*}{(SELECT|GROUP BY|ORDER BY)} {.+}
:b
匹配 space 或制表符。 *
匹配零次或多次出现(因此将匹配行开头的关键字)。
我不明白对列列表名称进行限制的目的,因此将其替换为通用的 .+
,这似乎更可靠。
如果不依赖关键字和列列表之间的单个 space,此解决方案可能会变得更加稳健:
{^:b*}{(SELECT|GROUP BY|ORDER BY)}:b+{.+}
我认为你应该在 [ ] 之后使用 * 量词来使前面的空格可选。所以表达式将是
^{[ ]*}{(SELECT|GROUP BY|ORDER BY)} {[#_a-z0-5]+}
并替换为您正在使用的相同模式。
\n