SQL Server Regex - 查找单个字符实例

Posted

技术标签:

【中文标题】SQL Server Regex - 查找单个字符实例【英文标题】:SQL Server Regex - Find single instance of character 【发布时间】:2020-10-21 09:10:42 【问题描述】:

鉴于以下测试数据,我想返回所有包含单个 & 字符的行,该字符之前或之后没有另一个 & 字符。

CREATE TABLE #RegexTest (Vals VARCHAR(10));
INSERT INTO #RegexTest (Vals) VALUES
('&'),       /* match */
('&&'),
('1 & 2'),   /* match */
('1 && 2'),
('1 && 2&')  /* match */

我尝试了以下使用负前瞻和负后瞻的方法:

SELECT *
FROM #RegexTest
WHERE Vals LIKE '%(?<!&)&(?!&)%'

但这不会返回任何行。我该怎么办?

【问题讨论】:

您的LIKE 表达式只会查找字段为Vals 的行包含包含文字字符串(?&lt;!&amp;)&amp;(?!&amp;) 的字符串,因为SQL 服务器不支持正则表达式。 【参考方案1】:

您可以使用模式%[^&amp;]&amp;[^&amp;]% 来查找前后没有相同字符的&amp;。必须填充短于 3 个字符的字符串才能使此技巧起作用:

WHERE CONCAT('|', vals, '|') LIKE '%[^&]&[^&]%'

【讨论】:

以上是关于SQL Server Regex - 查找单个字符实例的主要内容,如果未能解决你的问题,请参考以下文章

Java Regex:查找带转义的单引号文本

在推文中查找表情符号作为整个集群而不是单个字符

如何在 SQL Server 中将多行文本连接成单个文本字符串

Bigquery SQL Regex - 字符串的开始/结束或不跟随/跟随任何字母

MS SQL Server有没有查找字符串位置的函数

sql server 查找包含字符串的对象