MySQL 字符串模式匹配 扩展正则表达式模式匹配

王艺颖44

王艺颖44

2016-02-19 09:02

下面图老师小编跟大家分享一个简单易学的MySQL 字符串模式匹配 扩展正则表达式模式匹配教程,get新技能是需要行动的,喜欢的朋友赶紧收藏起来学习下吧!

标准的SQL模式匹配

SQL的模式匹配允许你使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零个字符)。在 MySQL中,SQL的模式缺省是忽略大小写的。下面显示一些例子。注意在你使用SQL模式时,你不能使用=或!=;而使用LIKE或NOT LIKE比较操作符。

例如,在表pet中,为了找出以“b”开头的名字:

mysql SELECT * FROM pet WHERE name LIKE "b%";

+--------+--------+---------+------+------------+------------+

| name   | owner | species | sex | birth      | death      |

+--------+--------+---------+------+------------+------------+

| Buffy | Harold | dog     | f    | 1989-05-13 | NULL       |

| Bowser | Diane | dog     | m    | 1989-08-31 | 1995-07-29 |

+--------+--------+---------+------+------------+------------+

为了找出以“fy”结尾的名字:

mysql SELECT * FROM pet WHERE name LIKE "%fy";

+--------+--------+---------+------+------------+-------+

| name   | owner | species | sex | birth      | death |

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

+--------+--------+---------+------+------------+-------+

| Fluffy | Harold | cat     | f    | 1993-02-04 | NULL |

| Buffy | Harold | dog     | f    | 1989-05-13 | NULL |

+--------+--------+---------+------+------------+-------+

为了找出包含一个“w”的名字:

mysql SELECT * FROM pet WHERE name LIKE "%w%";

+----------+-------+---------+------+------------+------------+

| name     | owner | species | sex | birth      | death      |

+----------+-------+---------+------+------------+------------+

| Claws    | Gwen | cat     | m    | 1994-03-17 | NULL       |

| Bowser   | Diane | dog     | m    | 1989-08-31 | 1995-07-29 |

| Whistler | Gwen | bird    | NULL | 1997-12-09 | NULL       |

+----------+-------+---------+------+------------+------------+

为了找出包含正好5个字符的名字,使用“_”模式字符:

mysql SELECT * FROM pet WHERE name LIKE "_____";

+-------+--------+---------+------+------------+-------+

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

| name | owner | species | sex | birth      | death |

+-------+--------+---------+------+------------+-------+

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

| Claws | Gwen   | cat     | m    | 1994-03-17 | NULL |

| Buffy | Harold | dog     | f    | 1989-05-13 | NULL |

+-------+--------+---------+------+------------+-------+

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

MySQL提供标准的SQL模式匹配,以及一种基于象Unix实用程序如vi、grep和sed的扩展正则表达式模式匹配的格式。

扩展正则表达式模式匹配

由MySQL提供的模式匹配的其他类型是使用扩展正则表达式。当你对这类模式进行匹配测试时,使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,它们是同义词)。

扩展正则表达式的一些字符是:

“.”匹配任何单个的字符。

一个字符类“[...]”匹配在方括号内的任何字符。例如,“[abc]”匹配“a”、“b”或“c”。为了命名字符的一个范围,使用一个“-”。

“[a-z]”匹配任何小写字母,而“[0-9]”匹配任何数字。

“ * ”匹配零个或多个在它前面的东西。例如,“x*”匹配任何数量的“x”字符,“[0-9]*”匹配的任何数量的数字,而“.*”匹配任何数量的任何东西。

正则表达式是区分大小写的,但是如果你希望,你能使用一个字符类匹配两种写法。例如,“[aA]”匹配小写或大写的“a”而“[a-zA-Z]”匹配两种写法的任何字母。

如果它出现在被测试值的任何地方,模式就匹配(只要他们匹配整个值,SQL模式匹配)。

为了定位一个模式以便它必须匹配被测试值的开始或结尾,在模式开始处使用“^”或在模式的结尾用“$”。

为了说明扩展正则表达式如何工作,上面所示的LIKE查询在下面使用REGEXP重写:

为了找出以“b”开头的名字,使用“^”匹配名字的开始并且“[bB]”匹配小写或大写的“b”:

mysql SELECT * FROM pet WHERE name REGEXP "^[bB]";

+--------+--------+---------+------+------------+------------+

| name   | owner | species | sex | birth      | death      |

+--------+--------+---------+------+------------+------------+

| Buffy | Harold | dog     | f    | 1989-05-13 | NULL       |

| Bowser | Diane | dog     | m    | 1989-08-31 | 1995-07-29 |

+--------+--------+---------+------+------------+------------+

为了找出以“fy”结尾的名字,使用“$”匹配名字的结尾:

mysql SELECT * FROM pet WHERE name REGEXP "fy___FCKpd___5quot;;

+--------+--------+---------+------+------------+-------+

| name   | owner | species | sex | birth      | death |

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

+--------+--------+---------+------+------------+-------+

| Fluffy | Harold | cat     | f    | 1993-02-04 | NULL |

| Buffy | Harold | dog     | f    | 1989-05-13 | NULL |

+--------+--------+---------+------+------------+-------+

为了找出包含一个“w”的名字,使用“[wW]”匹配小写或大写的“w”:

mysql SELECT * FROM pet WHERE name REGEXP "[wW]";

+----------+-------+---------+------+------------+------------+

| name     | owner | species | sex | birth      | death      |

+----------+-------+---------+------+------------+------------+

| Claws    | Gwen | cat     | m    | 1994-03-17 | NULL       |

| Bowser   | Diane | dog     | m    | 1989-08-31 | 1995-07-29 |

| Whistler | Gwen | bird    | NULL | 1997-12-09 | NULL       |

+----------+-------+---------+------+------------+------------+

既然如果一个正规表达式出现在值的任何地方,其模式匹配了,就不必再先前的查询中在模式的两方面放置一个通配符以使得它匹配整个值,

就像如果你使用了一个SQL模式那样。

为了找出包含正好5个字符的名字,使用“^”和“$”匹配名字的开始和结尾,和5个“.”实例在两者之间:

mysql SELECT * FROM pet WHERE name REGEXP "^.....___FCKpd___7quot;;

+-------+--------+---------+------+------------+-------+

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

| name | owner | species | sex | birth      | death |

+-------+--------+---------+------+------------+-------+

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

| Claws | Gwen   | cat     | m    | 1994-03-17 | NULL |

| Buffy | Harold | dog     | f    | 1989-05-13 | NULL |

+-------+--------+---------+------+------------+-------+

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

你也可以使用“{n}”“重复n次”操作符重写先前的查询:

mysql SELECT * FROM pet WHERE name REGEXP "^.{5}___FCKpd___8quot;;

+-------+--------+---------+------+------------+-------+

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

| name | owner | species | sex | birth      | death |

+-------+--------+---------+------+------------+-------+

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

| Claws | Gwen   | cat     | m    | 1994-03-17 | NULL |

| Buffy | Harold | dog     | f    | 1989-05-13 | NULL |

+-------+--------+---------+------+------------+-------+

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

总结

本介绍了有关字符串模式匹配的有关知识。标准的SQL模式匹配是SQL语言的标准,可以被其它关系数据库系统接受。扩展正规表达式模式匹配

是根据Unix系统的标准开发了,一般只可使用在MySQL上,但是其功能要比标准的SQL模式匹配更强。

展开更多 50%)
分享

猜你喜欢

MySQL 字符串模式匹配 扩展正则表达式模式匹配

编程语言 网络编程
MySQL 字符串模式匹配 扩展正则表达式模式匹配

php正则表达式中的非贪婪模式匹配

Web开发
php正则表达式中的非贪婪模式匹配

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

EditPlus 正则表达式替换字符串详解

Web开发
EditPlus 正则表达式替换字符串详解

常用的匹配正则表达式和实例

Web开发
常用的匹配正则表达式和实例

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

正则表达式匹配任意字符(包括换行符)的写法

Web开发
正则表达式匹配任意字符(包括换行符)的写法

asp正则表达式匹配数字$数字$数字$

Web开发
asp正则表达式匹配数字$数字$数字$

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

javascript replace方法与正则表达式

javascript replace方法与正则表达式

Win10如何给文件资源管理器添加永久删除快捷按钮

Win10如何给文件资源管理器添加永久删除快捷按钮
下拉加载更多内容 ↓