SQL 服务器正则表达式 - 查找字符的单个实例

SQL Server Regex - Find single instance of character

给定以下测试数据,我想 return 所有包含单个与号 (&) 字符且前后没有另一个与号的行。

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 '%(?<!&)&(?!&)%'

但是这个 return 没有行。我该怎么做?

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

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