繁体   English   中英

RegEx从SQL Server中合格列名中删除空格

[英]RegEx to remove whitespace from qualified column names in SQL Server

我构建了一个正则表达式来从SQL Server中合格列名中删除空格。 在单个输入字符串中可能会有很多这样的示例。例如,

SELECT * 
FROM dbo.[bad column name]
UNION
SELECT * 
FROM dbo.[bad column name2]

应该

SELECT * 
FROM dbo.[badcolumnname]
UNION
SELECT * 
FROM dbo.[badcolumnname2]

这是正则表达式搜索字符串: (\\[\\w*)( )([^\\[\\]]*?\\])

正则表达式替换:$ 1 $ 3

但是问题在于,需要多次调用它来替换列名称中的所有空格。

[bad column name]

成为

[badcolumn name]

然后最后是所需的输出

[badcolumnname]

经过两次连续的更换操作

什么是制作此正则表达式的好方法,以使其不必迭代?

如果您至少知道标签中的最大单词数,则可以使用这样的替换

\[((\w+)\s?)?((\w+)\s?)?((\w+)\s?)?((\w+)\s?)?((\w+)\s?)?\]

[$2$4$6$8$10]

https://regex101.com/r/uB5fQ4/2

如果您不关心正则表达式长一点,则可以使用非捕获组来避免捕获不需要的组,因此您不必跳过它们。

\[(?:(\w+)\s?)?(?:(\w+)\s?)?(?:(\w+)\s?)?(?:(\w+)\s?)?(?:(\w+)\s?)?\]

[$1$2$3$4$5]

https://regex101.com/r/wC1iX2/1

否则,您可能应该使用解析器而不是正则表达式,因为即使每次找到匹配项时都使用全局修饰符/ g,捕获组也会被覆盖。

您可以在这里查看情况: https//regex101.com/r/iN2rD4/2

这是使用javascript达到所需结果的一种方法:

https://jsfiddle.net/yosefh/0ohrno4L/1/

<body>
  <div id="result" ></div>
  <script>
  var str = '[bad column name]';
  var result = str.replace(/\s+/g,'');

  document.getElementById("result").innerHTML = result;
  </script>
</body>

和在PHP

$str = '[bad column name]';
$result = preg_replace('/\s+/', '', $str);

您可以在此处查看解析选项

如何将正则表达式与具有未知组数的分组匹配

和这里:

如何在JavaScript Regexp中捕获任意数量的组?

在这里使用regex进行实验: https//regex101.com/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM