MySQL正则表达式

正则表达式的应用

前面的几节的过滤例子允许用匹配、比较和通配操作符来寻找数据。对于基本的数据过滤,这样就足够了。但是随着过滤条件的复杂性的增加,where子句本身的复杂性也有必要增加。这也就是正则表达式变得有用的地方。

正则表达式是用来匹配文本中特殊的字符集合

MySQL 支持正则表达式的匹配, MySQL中使用 REGEXP 操作符来进行正则表达式匹配。

使用正则表达式查询和使用like区别是什么?

LIKE匹配整个列。如果被匹配的文本仅在列值中出现,LIKE并不会找到它,相应的行也不会返回(当然,使用通配符除外)。而REGEXP在列值内进行匹配,如果被匹配的匹配的文本在列值中出现,REGEXP将会找到它,相应的行将被返回,这时一个非常重要的差别(当然,如果适应定位符号^和$,可以实现REGEXP匹配整个列而不是列的子集)。

下表中的正则模式可应用于 REGEXP 操作符中。

符号             含义

^                   匹配输入字符串的开始位置。

$                   匹配输入字符串的结束位置。

[[:<:]]             词的开始

[[:>:]]             词的结尾

.                     匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用 '[.\n]' 的模式。

[...]                 字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。

[^...]                求否字符符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。

p1|p2|p3        匹配 p1 或 p2 或 p3。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。

*                      匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。

+                     匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。

{n}                   n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。

{n,m}                m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。

使用MySQL正则表达式

基本字符串匹配

SELECT prod_name FROM products WHERE prod_name REGEXP ‘1000’ ORDER BY prod_name;

检索prod_name包含文本1000的所有行。除关键字LIKE被REGEXP替代外,这条语句看上去非常像使用LIKE的语句。它告诉MySQL: REGEXP后所跟的东西作为正则表达式(与文字正文1000匹配的一个正则表达式)处理。

SELECT prod_name FROM products WHERE prod_name REGEXP ‘.000’ ORDER BY prod_name;

正则中,.代表匹配任意一个字符。区分大小写时:使用BINARY关键字

WHERE prod_name REGEXP BINARY ‘JetPack .000’;

进行OR匹配(使用‘|’)

SELECT prod_name FROM products WHERE prod_name REGEXP ‘1000|2000’ ORDER BY prod_name;

匹配几个字符之一

用[和]括起来的字符完成

SELECT prod_name FROM products WHERE prod_name REGEXP ‘[123] Ton’ ORDER BY prod_name;

[]是另一种形式的OR语句。 事实上,正则表达式[123]Ton

为[1|2|3]Ton的缩写,也可以使用后者。但是,需要用[]来定义OR语句查找什么。

SELECT prod_name FROM products WHERE prod_name REGEXP ‘1|2|3 Ton’ ORDER BY prod_name;

匹配范围

下面的集合将匹配数字0到9:[0-9],a到z:[a-z]

SELECT prod_name FROM products WHERE prod_name REGEXP ‘[1-5] Ton’ ORDER BY prod_name;

匹配特殊字符

必须用\\为前导,\\-表示查找-, \\.表示查找 .

SELECT vend_name FROM vendors WHERE vend_name REGEXP ‘\\.’ ORDER BY vend_name;

这种处理就是所谓的转义( escaping),正则表达式内具有特殊意义的所有字符都必须以这种方式转义。

匹配\ 为了匹配反斜杠( \)字符本身,需要使用\\\。

元 字 符 说 明

\\f          换页

\\n        换行

\\r         回车

\\t         制表

\\v       纵向制表

推荐阅读 更多精彩内容

  • 注意:mysql 仅支持多数正则表达式实现的一个很小的子集。 基本字符匹配 举例:select prod_name...
    zshanjun 阅读 245 评论 0 0
  • (一)几个数据库相关的概念 1.数据库 数据库: 保存有组织数据的容器。 数据的所有存储、检索、管理和处理实际上是...
    快乐的小飞熊 阅读 436 评论 0 1
  • 这一篇最主要是记录下命令,方便以后查找 使用Mysql 创建数据库 create database mysql_t...
    Treehl 阅读 491 评论 0 0
  • 第9章 用正则表达式搜索 1、正则表达式介绍 正则表达式是用来匹配某种文本模式的特殊字符串(字符集合),由正则表达...
    thinkact 阅读 339 评论 0 0
  • MySQL中使用 REGEXP 操作符来进行正则表达式匹配。 1、正则模式描述 ^:匹配输入字符串的开始位置。如果...
    必虎 阅读 532 评论 0 0