linuxsir首页 LinuxSir.Org | Linux、BSD、Solaris、Unix | 开源传万世,因有我参与欢迎您!
网站首页 | 设为首页 | 加入收藏
您所在的位置:主页 > Linux基础建设 >

MySQL 正则表达式详解

时间:2019-05-11  来源:未知  作者:admin666

一.介绍

正则表达式用来描述或者匹配符合规则的字符串。它的用法和like比较相似,但是它又比like更强大,能够实现一些很特殊的规则匹配;正则表达式需要使用REGEXP命令,匹配上返回"1"匹配不上返回"0",默认不加条件REGEXP相当于like '%%'。在前面加上NOT相当于NOT LIKE。

命令

说明

^

在字符的开启处进行匹配

$

在字符的末尾处进行匹配

.

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

[….]

匹配括号内的任意单个字符

[m-n]

匹配m到n之间的任意单个字符,例如[0-9],[a-z],[A-Z]

[^..]

不能匹配括号内的任意单个字符

a*

匹配0个或多个a,包括空,可以作为占位符使用.

a+

匹配一个或多个a,不包括空

a?

匹配一个或0个a

a1| a2

匹配a1或a2

a{m}

匹配m个a

a{m,}

匹配m个或者更多个a

a{m,n}

匹配m到n个a

a{,n}

匹配0到n个a

(….)

将模式元素组成单一元素,例如(do)*意思是匹配0个多或多个do

二 使用测试
^

在字符串开始处进行匹配

mysql> SELECT  'abc' REGEXP '^a';
+-------------------+
| 'abc' REGEXP '^a' |
+-------------------+
|                1 |
+-------------------+
row in set (0.00 sec)

$

在字符串末尾开始匹配

mysql> SELECT  'abc' REGEXP 'a$';
+-------------------+
| 'abc' REGEXP 'a$' |
+-------------------+
|                0 |
+-------------------+
row in set (0.01 sec)
 
mysql> SELECT  'abc' REGEXP 'c$';
+-------------------+
| 'abc' REGEXP 'c$' |
+-------------------+
|                1 |
+-------------------+
row in set (0.00 sec) 

.

匹配任意字符

mysql> SELECT  'abc' REGEXP '.a';
+-------------------+
| 'abc' REGEXP '.a' |
+-------------------+
|                0 |
+-------------------+
row in set (0.00 sec)
 
mysql> SELECT  'abc' REGEXP '.b';
+-------------------+
| 'abc' REGEXP '.b' |
+-------------------+
|                1 |
+-------------------+
row in set (0.00 sec)
 
mysql> SELECT  'abc' REGEXP '.c';
+-------------------+
| 'abc' REGEXP '.c' |
+-------------------+
|                1 |
+-------------------+
row in set (0.00 sec)
 
mysql> SELECT  'abc' REGEXP 'a.';
+-------------------+
| 'abc' REGEXP 'a.' |
+-------------------+
|                1 |
+-------------------+
row in set (0.00 sec)

  

[...]

匹配括号内的任意单个字符

mysql> SELECT  'abc' REGEXP '[xyz]';
+----------------------+
| 'abc' REGEXP '[xyz]' |
+----------------------+
|                    0 |
+----------------------+
row in set (0.00 sec)
 
mysql> SELECT  'abc' REGEXP '[xaz]';
+----------------------+
| 'abc' REGEXP '[xaz]' |
+----------------------+
|                    1 |
+----------------------+
row in set (0.00 sec)

 

[^...]

注意^符合只有在[]内才是取反的意思,在别的地方都是表示开始处匹配

 注意:REGEXP 前的匹配字符作为一个整体

mysql> SELECT  'a' REGEXP '[^abc]';
+---------------------+
| 'a' REGEXP '[^abc]' |
+---------------------+
|                  0 |
+---------------------+
row in set (0.00 sec)
 
mysql> SELECT  'x' REGEXP '[^abc]';
+---------------------+
| 'x' REGEXP '[^abc]' |
+---------------------+
|                  1 |
+---------------------+
row in set (0.00 sec)
 
 
mysql> SELECT  'abc' REGEXP '[^a]';
+---------------------+
| 'abc' REGEXP '[^a]' |
+---------------------+
|                  1 |
+---------------------+
row in set (0.00 sec)

 注意: 'abc'作为一个整体,所以它匹配不了a

 

a*

匹配0个或多个a,包括空字符串。 可以作为占位符使用.有没有指定字符都可以匹配到数据

mysql> SELECT 'stab' REGEXP '.ta*b';
+-----------------------+
| 'stab' REGEXP '.ta*b' |
+-----------------------+
|                    1 |
+-----------------------+
row in set (0.00 sec)
mysql> SELECT 'stb' REGEXP '.ta*b';
+----------------------+
| 'stb' REGEXP '.ta*b' |
+----------------------+
|                    1 |
+----------------------+
 
mysql> SELECT '' REGEXP 'a*';
+----------------+
| '' REGEXP 'a*' |
+----------------+
|              1 |
+----------------+
1 row in set (0.00 sec)

  

a+

匹配1个或者多个a,但是不包括空字符

mysql> SELECT 'stab' REGEXP '.ta+b';
+-----------------------+
| 'stab' REGEXP '.ta+b' |
+-----------------------+
|                    1 |
+-----------------------+
row in set (0.00 sec)
 
mysql> SELECT 'stb' REGEXP '.ta+b';
+----------------------+
| 'stb' REGEXP '.ta+b' |
+----------------------+
|                    0 |
+----------------------+
row in set (0.00 sec)

  

a?

匹配0个或者1个a

mysql> SELECT 'stb' REGEXP '.ta?b';
+----------------------+
| 'stb' REGEXP '.ta?b' |
+----------------------+
|                    1 |
+----------------------+
row in set (0.00 sec)
 
mysql> SELECT 'stab' REGEXP '.ta?b';
+-----------------------+
| 'stab' REGEXP '.ta?b' |
+-----------------------+
|                    1 |
+-----------------------+
row in set (0.00 sec)
 
mysql> SELECT 'staab' REGEXP '.ta?b';
+------------------------+
| 'staab' REGEXP '.ta?b' |
+------------------------+
|                      0 |
+------------------------+
row in set (0.00 sec)

 

a1|a2

匹配a1或者a2,

mysql> SELECT 'a' REGEXP 'a|b';
+------------------+
| 'a' REGEXP 'a|b' |
+------------------+
|                1 |
+------------------+
row in set (0.00 sec)
 
mysql> SELECT 'b' REGEXP 'a|b';
+------------------+
| 'b' REGEXP 'a|b' |
+------------------+
|                1 |
+------------------+
row in set (0.00 sec)
 
mysql> SELECT 'b' REGEXP '^(a|b)';
+---------------------+
| 'b' REGEXP '^(a|b)' |
+---------------------+
|                  1 |
+---------------------+
row in set (0.00 sec)
 
mysql> SELECT 'a' REGEXP '^(a|b)';
+---------------------+
| 'a' REGEXP '^(a|b)' |
+---------------------+
|                  1 |
+---------------------+
row in set (0.00 sec)
 
mysql> SELECT 'c' REGEXP '^(a|b)';
+---------------------+
| 'c' REGEXP '^(a|b)' |
+---------------------+
|                  0 |
+---------------------+
row in set (0.00 sec)

 注意:^符合只有在[]内才是取反的意思,在别的地方都是表示开始处匹配 

 

a{m}

匹配m个a

mysql> SELECT 'auuuuc' REGEXP 'au{4}c';
+--------------------------+
| 'auuuuc' REGEXP 'au{4}c' |
+--------------------------+
|                        1 |
+--------------------------+
row in set (0.00 sec)
 
mysql> SELECT 'auuuuc' REGEXP 'au{3}c';
+--------------------------+
| 'auuuuc' REGEXP 'au{3}c' |
+--------------------------+
|                        0 |
+--------------------------+
row in set (0.00 sec)

  

a{m,}

匹配m个或者更多个a

mysql> SELECT 'auuuuc' REGEXP 'au{3,}c';
+---------------------------+
| 'auuuuc' REGEXP 'au{3,}c' |
+---------------------------+
|                        1 |
+---------------------------+
row in set (0.00 sec)
 
mysql> SELECT 'auuuuc' REGEXP 'au{4,}c';
+---------------------------+
| 'auuuuc' REGEXP 'au{4,}c' |
+---------------------------+
|                        1 |
+---------------------------+
row in set (0.00 sec)
 
mysql> SELECT 'auuuuc' REGEXP 'au{5,}c';
+---------------------------+
| 'auuuuc' REGEXP 'au{5,}c' |
+---------------------------+
|                        0 |
+---------------------------+
row in set (0.00 sec)

  

a{m,n}

匹配m到n个a,包含m和n

mysql> SELECT 'auuuuc' REGEXP 'au{3,5}c';
+----------------------------+
| 'auuuuc' REGEXP 'au{3,5}c' |
+----------------------------+
|                          1 |
+----------------------------+
row in set (0.00 sec)
 
mysql> SELECT 'auuuuc' REGEXP 'au{4,5}c';
+----------------------------+
| 'auuuuc' REGEXP 'au{4,5}c' |
+----------------------------+
|                          1 |
+----------------------------+
row in set (0.00 sec)
 
mysql> SELECT 'auuuuc' REGEXP 'au{5,10}c';
+-----------------------------+
| 'auuuuc' REGEXP 'au{5,10}c' |
+-----------------------------+
|                          0 |
+-----------------------------+
row in set (0.00 sec)

  

(abc)

将abc作为一个序列匹配,不用括号括起来都是用单个字符去匹配,如果要把多个字符作为一个整体去匹配就需要用到括号,所以括号适合上面的所有情况。

mysql> SELECT 'xababy' REGEXP 'x(abab)y';
+----------------------------+
| 'xababy' REGEXP 'x(abab)y' |
+----------------------------+
|                          1 |
+----------------------------+
row in set (0.00 sec)
 
mysql> SELECT 'xababy' REGEXP 'x(ab)*y';
+---------------------------+
| 'xababy' REGEXP 'x(ab)*y' |
+---------------------------+
|                        1 |
+---------------------------+
row in set (0.00 sec)
 
mysql> SELECT 'xababy' REGEXP 'x(ab){1,2}y';
+-------------------------------+
| 'xababy' REGEXP 'x(ab){1,2}y' |
+-------------------------------+
|                            1 |
+-------------------------------+
row in set (0.00 sec)

总结
特别要注意最后的()的命令,如果不使用()那么所有的都是指单个字符去做匹配,如果需要使用多个字符作为一个整体去匹配,就需要将多个字符使用()给括起来

1.使用REGEXP和NOT REGEXP操作符(类似LIKE和NOT LIKE);

2.REGEXP默认也是不区分大小写,可以使用BINARY关键词强制区分大小写; WHERE NAME REGEXP BINARY ‘^[A-Z]’;

3.REGEXP默认是部分匹配原则,即有一个匹配上则返回真。例如:SELECT  'Abc' REGEXP BINARY '[A-Z]';

Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx

友情链接
  • Android Q Beta 3推出全新系统黑暗主题,实时字幕等
  • WordPress 5.2 “Jaco”发布
  • LibreOffice 6.1于5月29日到达生命周期,请升级到LibreOffice 6.
  • Sailfish OS “Hossa”从旧eglibc 2.19升级,但仍依赖于GCC 4
  • Apple发布iOS 12.3,macOS 10.14.5,tvOS 12.3和watchOS 5.2.1的
  • GeForce GTX 1650支持向418.74更新移植到稳定的Linux驱动程序
  • Red Hat Enterprise Linux 8.0(RHEL8)正式发布了
  • Android Q的ANGLE在Vulkan上提供OpenGL ES
  • Ubuntu 14.04(Trusty Tahr)达到生命终点,现在升级到Ubuntu 18
  • .NET 5 将于2020年问世
  • Linux Mint 17达到了生命终结,用户需要升级到Linux Mint 18或19
  • Mesa 19.1已被分支,Mesa 19.2正在开发中
  • macOS版本的Microsoft Edge 浏览器下载地址泄露
  • 微软为何开发Chromium Edge浏览器?相关内幕曝光
  • Linux版的Microsoft Edge浏览器可能在工作中
  • FBI查获暗网索引和新闻网站Deep Dot Web
  • 微软宣布推出Windows Subsystem for Linux 2(WSL 2)
  • Canonical为微软Hyper
  • 微软为Windows 10带来原生Linux内核,将成为WSL 2的一部分
  • KDE Plasma 5.15桌面寿命终结,KDE Plasma 5.16于6月11日发布
  • 适用于Linux的最佳Photoshop替代品
  • Ant Design 3.17.0 发布,企业级UI设计语言
  • 音乐播放器 Qmmp 1.3.2 发布,修复Wayland会话问题
  • Google为Linux 5.2开发了一款新的Aspeed控制驱动程序
  • JupyterHub 1.0 发布,命名服务器与TLS加密支持
  • Linux Kernel 5.1 正式发布,大量新功能
  • ARM事务内存扩展支持开始在Linux中得到应用
  • RStudio 1.2发布,改进对Python chunks,R脚本等的测试和支持
  • Firefox 66.0.4 发布,解决由于证书过期而导致的插件损坏问题
  • Mozilla证书过期导致全球Firefox用户无法使用扩展
  • 微软宣布推出“Windows Terminal”,受Linux风格启发终端
  • 印度将于5月成立国防网络局
  • GCC 9优化工作归功于Firefox开发人员
  • Btrfs在Linux 5.2内核中获得一些有用的修复/改进
  • Unigine 2.8 发布,更好的植被与异步数据流
  • Sway 1.1 RC1 发布,为Swaybar带来触控支持
  • GNU Linux
  • Linux Kernel 5.1 应该会在今天发布,更快的zRAM
  • 更多AMD Radeon “Navi”代码继续在LLVM中登陆其编译器后端
  • Ubuntu Linux现在支持微软的第二代Windows Linux子系统(WSL 2 )
  • Visual Studio Code添加Java 12支持,Java代码操作和语言功能
  • GNOME 3.34的Mutter集成了一个新的剪贴板管理器
  • Ubuntu 19.10代号为“Eoan Ermine”,将于10月17日发布
  • Brackets 1.14 发布,LSP支持(Ubuntu下安装方法)
  • Darling仍然有在Linux上运行macOS应用程序的目标
  • 足球大赢家
  • 福利彩票
  • 足球比分188
  • 老虎机71966澳门永利平台
  • 甄子丹龙虎门
  • 澳门赌场