当前位置: 首页 > 面试题库 >

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

裴展
2023-03-14
问题内容

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

我试过了:

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

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


问题答案:

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

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

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

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

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

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

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

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

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

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

除了这些以及使用’[‘的某些组合(请参阅下一段)之外, 所有其他特殊字符(包括’')在方括号表达式内都失去其特殊意义

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

DDL: 创建表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';


 类似资料:
  • 本文向大家介绍正则表达式匹配各种特殊字符,包括了正则表达式匹配各种特殊字符的使用技巧和注意事项,需要的朋友参考一下 写个可以匹配一下各种特殊字符的正则表达式 这个匹配所有键盘上可见的非字母和数字的符号 这个是输入框防止特殊字符勿输入验证,包括键盘上所有特殊字符的英文和中文状态。需要者可以根据自身需求而定!谢谢! [^\w\s]+ 匹配非空 非字母 非数字 即可 1 数字:^[0-9]*$ 2 n位

  • 我有一个类似这样的字符串: 但是我得到了一个 你知道我做错了什么吗?

  • 问题内容: 我有一个带有某些配置值的文本文件。以#开头的注释我试图找到一个正则表达式模式,该模式将找出以#开头的所有行。 因此,示例文件: 我想找到 因为只有这两行以#开头,所以我尝试了以下代码: 但是它总是输出空数组。有人可以帮忙吗? 问题答案: 你忘了多修饰符(你应该 不 使用单线改性剂;也是不区分大小写的修饰符是不必要的,因为还有ungreedy修改): 说明: 允许and 在行的开头/结尾

  • 我试图为密码字段创建一个验证,它只允许字符和 时有什么区别,以及哪些字符来自

  • 问题内容: 我想搭配以下 com.my.company。 moduleA .MyClassName com.my.company。 moduleB .MyClassName com.my.company。 anythingElse .MyClassName 但 不是 以下 com.my.company。 核心 .MyClassName 我当前的简单正则表达式模式是: 因此,基本上,我该如何匹配其他

  • 我有一些xml文件,希望删除除特定字符串以外的所有内容。 StackOverflow上还有很多类似的问题,但都不适用于我的文件,在尝试了几个小时不同的正则表达式后,我想寻求帮助。 到目前为止,部分成功但并非完全成功的最接近的正则表达式是: xml文件的示例: 我使用regex101,因此可以将示例粘贴在那里,以了解为什么rex只能部分工作。简而言之,它与第一次出现的不匹配,但与第二次出现的匹配。我

  • 问题内容: 我在尝试将我的javascript regex经验转移到Python时遇到了麻烦。 我只是想让它工作: …但是它打印无。如果我做: 它匹配…默认情况下是否匹配字符串的开头?当匹配时,如何使用结果? 我如何进行第一场比赛?是否有比python网站提供的文档更好的文档? 问题答案: 隐式添加到您的正则表达式的开头。换句话说,它仅在字符串的开头匹配。 将在所有位置重试。 一般来说,建议您在需

  • 问题内容: 我在用Python将字符串中的数字匹配时遇到麻烦。尽管应该明确匹配,但甚至不匹配 或仅匹配。我的监督在哪里? 问题答案: 阅读文档:http : //docs.python.org/2/library/re.html#re.match 如果在零个或多个字符 开头 的 字符串 您要使用(或)