作为一个更为复杂的示例,正则表达式B[an]*s匹配下述字符串中的任何一个:Bananas,Baaaaas,Bs,以及以B开始、以s结束、并在其中包含任意数目a或n字符的任何其他字符串。

以下是可用于随REGEXP操作符的表的模式。

应用示例,查找用户表中Email格式错误的用户记录:

?
1
2
3
SELECT *
FROM users
WHERE email NOT REGEXP '^[A-Z0-9._%-]+@[A-Z0-9.-]+.[A-Z]{2,4}$'

MySQL数据库中正则表达式的语法,主要包括各种符号的含义。

(^)字符

匹配字符串的开始位置,如“^a”表示以字母a开头的字符串。

?
1
2
3
4
5
6
7
8
mysql> select 'xxxyyy' regexp '^xx';
+-----------------------+
| 'xxxyyy' regexp '^xx' |
+-----------------------+
|           1 |
+-----------------------+
1 row in set (0.00 sec)

查询xxxyyy字符串中是否以xx开头,结果值为1,表示值为true,满足条件。

($)字符

匹配字符串的结束位置,如“X^”表示以字母X结尾的字符串。

(.)字符

这个字符就是英文下的点,它匹配任何一个字符,包括回车、换行等。

(*)字符

星号匹配0个或多个字符,在它之前必须有内容。如:

?
1
mysql> select 'xxxyyy' regexp 'x*';

这个SQL语句,正则匹配为true。

(+)字符

加号匹配1个或多个字符,在它之前也必须有内容。加号跟星号的用法类似,只是星号允许出现0次,加号则必须至少出现一次。

(?)字符

问号匹配0次或1次。

实例:

现在根据上面的表,可以装置各种不同类型的SQL查询以满足要求。在这里列出一些理解。考虑我们有一个表为person_tbl和有一个字段名为名称:

查询找到所有的名字以'st'开头

?
1
mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st';

查询找到所有的名字以'ok'结尾

?
1
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$';

查询找到所有的名字包函'mar'的字符串

?
1
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'mar';

查询找到所有名称以元音开始和'ok'结束 的

?
1
mysql> SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';

一个正则表达式中的可以使用以下保留字

^

所匹配的字符串以后面的字符串开头

?
1
2
mysql> select "fonfo" REGEXP "^fo$"; -> 0(表示不匹配)
mysql> select "fofo" REGEXP "^fo"; -> 1(表示匹配)

$

所匹配的字符串以前面的字符串结尾

?
1
2
3
mysql> select "fono" REGEXP "^fono$"; -> 1(表示匹配)
mysql> select "fono" REGEXP "^fo$"; -> 0(表示不匹配)
.

匹配任何字符(包括新行)

?
1
2
mysql> select "fofo" REGEXP "^f.*"; -> 1(表示匹配)
mysql> select "fonfo" REGEXP "^f.*"; -> 1(表示匹配)

a*

匹配任意多个a(包括空串)

?
1
2
3
mysql> select "Ban" REGEXP "^Ba*n"; -> 1(表示匹配)
mysql> select "Baaan" REGEXP "^Ba*n"; -> 1(表示匹配)
mysql> select "Bn" REGEXP "^Ba*n"; -> 1(表示匹配)

a+

匹配任意多个a(不包括空串)

?
1
2
mysql> select "Ban" REGEXP "^Ba+n"; -> 1(表示匹配)
mysql> select "Bn" REGEXP "^Ba+n"; -> 0(表示不匹配)

a?

匹配一个或零个a

?
1
2
3
mysql> select "Bn" REGEXP "^Ba?n"; -> 1(表示匹配)
mysql> select "Ban" REGEXP "^Ba?n"; -> 1(表示匹配)
mysql> select "Baan" REGEXP "^Ba?n"; -> 0(表示不匹配)

de|abc

匹配de或abc

?
1
2
3
4
5
6
mysql> select "pi" REGEXP "pi|apa"; -> 1(表示匹配)
mysql> select "axe" REGEXP "pi|apa"; -> 0(表示不匹配)
mysql> select "apa" REGEXP "pi|apa"; -> 1(表示匹配)
mysql> select "apa" REGEXP "^(pi|apa)$"; -> 1(表示匹配)
mysql> select "pi" REGEXP "^(pi|apa)$"; -> 1(表示匹配)
mysql> select "pix" REGEXP "^(pi|apa)$"; -> 0(表示不匹配)

(abc)*

匹配任意多个abc(包括空串)

?
1
2
3
mysql> select "pi" REGEXP "^(pi)*$"; -> 1(表示匹配)
mysql> select "pip" REGEXP "^(pi)*$"; -> 0(表示不匹配)
mysql> select "pipi" REGEXP "^(pi)*$"; -> 1(表示匹配)

{1} 
{2,3}

这是一个更全面的方法,它可以实现前面好几种保留字的功能

a*

可以写成a{0,}

a+

可以写成a{1,}

a?

可以写成a{0,1}

   在{}内只有一个整型参数i,表示字符只能出现i次;在{}内有一个整型参数i,后面跟一个“,”,表示字符可以出现i次或i次以上;在{}内只有一个整型参数i,后面跟一个“,”,再跟一个整型参数j,表示字符只能出现i次以上,j次以下(包括i次和j次)。其中的整型参数必须大于等于0,小于等于 RE_DUP_MAX(默认是255)。 如果有两个参数,第二个必须大于等于第一个

[a-dX]

匹配“a”、“b”、“c”、“d”或“X”

[^a-dX]

匹配除“a”、“b”、“c”、“d”、“X”以外的任何字符。

“[”、“]”必须成对使用

?
1
2
3
4
5
6
mysql> select "aXbc" REGEXP "[a-dXYZ]"; -> 1(表示匹配)
mysql> select "aXbc" REGEXP "^[a-dXYZ]$"; -> 0(表示不匹配)
mysql> select "aXbc" REGEXP "^[a-dXYZ]+$"; -> 1(表示匹配)
mysql> select "aXbc" REGEXP "^[^a-dXYZ]+$"; -> 0(表示不匹配)
mysql> select "gheis" REGEXP "^[^a-dXYZ]+$"; -> 1(表示匹配)
mysql> select "gheisa" REGEXP "^[^a-dXYZ]+$"; -> 0(表示不匹配)

转载于:https://www.cnblogs.com/cai170221/p/11236149.html

SQL:REGEXP相关推荐

  1. Oracle的charlist通配符,SQL 通配符

    通配符与 SQL LIKE 操作符一起使用. SQL 通配符用于搜索表中的数据. 选取 url 以字母 "https" 开始的所有网站: SELECT * FROM Website ...

  2. mongodb文档操作

    增 #1.没有指定_id则默认ObjectId,_id不能重复,且在插入后不可变#2.插入单条 user0={"name":"egon","age&q ...

  3. Mongodb 基本操作

    mongo简介 1.基于分布式文件存储的数据库.  为 WEB应用提供可扩展的高性能数据存储解决方案. 2.Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言, 几乎可 ...

  4. Dojo API略解续

    dojo.lang.string dojo.string.substituteParams 类似C#中的String.Format函数 %{name}要保证与传入的对象的名称大小写一致,否则会出异常 ...

  5. 1月16日学习内容整理:存储库MongoDB之文档的增删改查操作补充

    文档操作 一.查 1.比较运算 # SQL:=,!=,>,<,>=,<= # MongoDB:{key:value}代表什么等于什么,"$ne"," ...

  6. mongoDB安装及使用

    一.简介 MongDB是一个面向文档的数据库,是非关系型数据库.此外,它不再有预定义模式(predefined schema):文档的键(key)和值(value)不再是固定的类型和大小. 二.Mon ...

  7. java 必备面试必备

    1.JDK 和 JRE 有什么区别? JDK(Java Development Kit),Java开发工具包 JRE(Java Runtime Environment),Java运行环境 JDK中包含 ...

  8. php sql中regexp,[NCTF2019]SQLi(regexp注入)

    主页就一个登录框 .把sql语句显示出来了. 再进行一波信息搜集.看看robots.txt 有个hint.txt $black_list = "/limit|by|substr|mid|,| ...

  9. SQL正则盲注-regexp

    题目链接: 地址 下面是题目源码 <?php include "config.php"; error_reporting(0); highlight_file(__FILE_ ...

最新文章

  1. TreeSet HashSet
  2. Android View的事件分发机制解析
  3. DCMTK:表示基于文件系统的基本工作列表管理服务类提供程序的控制台引擎的类
  4. 2.1)深度学习笔记:深度学习的实践层面
  5. 用Docker搭建Elasticsearch集群
  6. 【Linux】Linux按tab键补全文件(名)或路径不区分大小写
  7. linux中的 127.0.0.1和0.0.0.0和::
  8. 微信小程序wx.request请求用POST后台得不到传递数据
  9. android selector(转)
  10. 扫地机器人湿地_黑五好价 美亚直邮 iRobot Braava 380t 拖地机器人
  11. Ubuntu安装sqlmap
  12. Virtualbox安装Debian 安装VBoxGuestAdditions增强工具
  13. Elf二进制文件解析
  14. div+js写弹出框
  15. 构建Spring Web应用程序
  16. 第一代电子计算机使用的逻辑部件是( ),第一代电子计算机使用的逻辑部件是
  17. 铁流:中国突破半导体新工艺研发
  18. DNS云学堂 | 三分钟了解,最近大火的DOH与HTTPDNS、DOT的异同
  19. 【Altium秘籍】room 复制报错的解决办法
  20. 比尔盖茨The Best Books I Read in 2013

热门文章

  1. CRM_REPORT_RF_CHECK_AUTHORITY call CRM_REPORT_RF_AUTH_OBJ_ORD_LP
  2. 如何找到是哪一个进程占用了某个端口号
  3. JavaScript and Ruby in ABAP
  4. lol韩服游戏内设置_lol韩服游戏内设置界面翻译
  5. java源码导入eclipse_如何导入外部的源码到eclipse中
  6. 数据可视化|实验五 分析1996-2015年人口数据各个特征的分布与分散状况
  7. b-2014四川电子机械职业技术学院计算机科学与技术毕业设计选题,2014届计算机科学与技术专业本科毕业设计(论文)选题指南...
  8. linux设置静态IP及克隆后修改IP和hostname
  9. window10系统 同时安装支持 jdk 1.7和1.8环境
  10. windowsphone开发_十大混生开发框架