[英]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.