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