如何用围绕它们的括号替换所有列?

时间:2014-11-25 22:36:31

标签: regex replace find ssms

注意 - 如果有人错过了标签,我在SSMS 2012的“查找和替换”工具中使用了正则表达式。

所以我有这个问题:

SELECT [name]
      ,[categories]
FROM [TEST_QUERIES].[dbo].[TestForCSV]

我想将其更改为:

SELECT replace([name], ',', '|')
      ,replace([categories], ',', '|')
  FROM [TEST_QUERIES].[dbo].[TestForCSV]

我试过

find what: {\[*\]}
replace with: replace(\0, ',', '|')

但那没用。那么使这项工作的正则表达式是什么?

修改 所以在阅读@SO帖子并阅读this list后,我现在有了这个:

find what: {\[.*\]}
replace with: replace(\0, ',', '|')

和这个

find what: {\[:w\]}
replace with: replace(\0, ',', '|')

问题是他们给了我

replace([TEST_QUERIES].[dbo].[TestForCSV], ',', '|')

[TEST_QUERIES].replace([dbo], ',', '|').replace([TestForCSV], ',', '|')

分别。

我只想要在SELECT之后但在FROM更改之前的内容。

1 个答案:

答案 0 :(得分:1)

/[\[][\w]+[\]]/将匹配方括号中的任何字词。

故障:

第一个和最后一个/是分隔符,模式如下:

[\[]将匹配单个左方括号[

[\w]+将匹配a-z,A-Z,0-9和_的一个或多个字母('\ w'是这些字符组的简写表达式)

[\]]将匹配单个结束方括号]

在正则表达式中,方括号是一个特殊字符,用于匹配括号之间的任何内容的单个实例,因此我们必须使用反斜杠\来转义“方括号内的方括号”

[[][]]不起作用。

总之,所使用的模式显示“匹配开头方括号[,然后匹配a-zA-Z0-9或{{1}的任意数量/组合最后匹配一个封闭的方括号_。“

] = /[\[][\w]+[\]]/

编辑 进一步请求后备功能

[a-zA-Z0-9_]

此模式将根据您的示例匹配,但可能不适合您代码中的其他参数。该模式使用一个名为“lookbehind”的函数,所有正则表达式引擎都不支持该函数。

您可以在此处查看此模式的工作原理:http://regex101.com/r/eP6nS4/2

这应该为您提供了解模式如何工作以及如何修改模式所需的信息。