SQL匹配特殊字符正则表达式

我正在寻找一条SQL语句,该语句仅返回表Name中包含特殊字符(不包括下划线)的行。

我试过了:

SELECT * FROM 'table' WHERE Name REGEXP '^[!#$%&()*+,\-./:;<=>?@[\\\]^`{|}~]+$'

但是没有骰子,这将返回一个空结果集(尽管我专门添加了包含%, $, and #字符的Name字段的行)。

回答:

第一个问题似乎是^$符号(Mike C总结的速度比我为什么要快…)

但是我也看到了转义问题:所有在regexp中表示某些内容的特殊字符都应为 逃脱了 特别是放置在[],所以[]^-

结论在正则表达式文档中有详细说明:

方括号表达式是用“ []”括起来的字符列表。它通常与列表中的任何单个字符匹配(但请参见下文)。

  • 如果列表以“ ^”开头,则它匹配任何单个字符(但请参见下文),而不是列表的其余部分。

*

如果列表中的两个字符用’-‘分隔,则这是整理序列中这两个字符之间(包括两个字符)的完整字符的缩写,例如ASCII中的[[0-9]]匹配任何十进制数字。

  • 两个范围共享一个端点是非法的(!),例如’ac-e’。范围非常依赖于序列,并且可移植程序应避免依赖它们。

  • 要在列表中包含文字’]’,请将其设为第一个字符(在可能的’^’之后)。

  • 要包含文字“-”,请使其成为范围的第一个或最后一个字符或第二个端点。

  • 要将文字“-”用作范围的第一个端点,请将其括在“ [。”中。和’。]’使其成为整理元素(请参见下文)。

除了这些以及使用’[‘的某些组合(请参阅下一段)之外, 。

这是有关该]字符的一些有趣正则表达式的SQL小提琴

创建表txt(txt varchar(200));

insert into txt values ('ab[]cde');

insert into txt values ('ab[cde');

insert into txt values ('ab]cde');

insert into txt values ('ab[]]]]cde');

insert into txt values ('ab[[[[]cde');

insert into txt values ('ab\\]]]]cde');

insert into txt values ('ab[wut?wut?]cde');

幼稚的方法来匹配一组[]字符。从语法上讲可以,但是该组是单个[字符,然后与多个]字符匹配。

SELECT * FROM txt WHERE txt 

REGEXP 'ab[[]]+cde';

转义->相同???

SELECT * FROM txt WHERE txt 

REGEXP 'ab[[\]]+cde';

两次转义->不起作用,组现在是a[和a\

SELECT * FROM txt WHERE txt 

REGEXP 'ab[[\\]]+cde';

将封闭支架与组中的一个打开交换。这是我写过的最奇怪的正则表达式-至此…

SELECT * FROM txt WHERE txt 

REGEXP 'ab[][]+cde';

我会在一个怪异的噩梦中被这种(完全有效的)正则表达式杀死,我认为:

SELECT * FROM txt WHERE txt 

REGEXP 'ab[]wut?[]+cde';

以上是 SQL匹配特殊字符正则表达式 的全部内容, 来源链接: utcz.com/qa/424173.html

回到顶部