1. Mysql的正则表达式仅仅使SQL语言的一个子集,可以匹配基本的字符、字符串。
select * from wp_posts where post_name REGEXP 'hello'; 可以检索出列post_name中所有包含hello的行
2. .匹配除\n之外的任意单个字符
select * from wp_posts where post_name REGEXP '.og';
.是正则表达式中里一个特殊的字符。它表示匹配一个字符,因此,bog,cog,dog等等都能匹配。
注意:
关于大小写的区分:MySQL中正则表达式匹配(从版本3.23.4后)不区分大小写 。
如果要区分大小写,应该使用BINARY关键字,如where post_name REGEXP BINARY 'Hello .000'
3. ^匹配字符串开始位置,如查询所有姓王的人名
select name from 表名 where name REGEXP '^王';
4. $匹配字符串结束位置,如查询所有姓名末尾是“明”的人名
select name from 表名 where name REGEXP '明$';
5. OR匹配
为了搜索多个串之一,使用|
select * from products where pro_id REGEXP '1000|2000';
这样就1000和2000都能匹配并返回,当然,使用多个|就可以匹配多个串
6. []匹配几个字符
例如,这样将要匹配[0123456789]可以匹配0到9,[1-4][4-9]也是合法的范围。
此外,范围不一定只是数值的,[a-z]匹配任意字母字符
如查询出w/z/s开头的的人名
SELECT prod_name FROM products WHERE prod_name REGEXP '^[wzs]';
7. [^……],匹配不包含在[]的字符,如查询出除chenmin之外的人名
SELECT prod_name FROM products WHERE prod_name REGEXP '[^chenmin]';
8. 匹配特殊字符使用\进行转义
\\.能够匹配.
\\f换页
\\n换行
\\r回车
\\t制表
9. 匹配字符类
[:alnum:] 任意字母和数字(通[a-zA-Z0-9])
[:alpha:] 任意字符(同[a-zA-Z])
[:blank:] 空格和制表符(同[\\t])
[:digit:] 任意数字(同[0-9])
[:lower:] 任意小写字母
[:upper:] 任意大写字母
[:space:] 包括空格在内的任意空白字符
10. 匹配多个实例,关于重复元字符
* 0个或者多个匹配
+ 1个或者多个匹配(等于{1,})
? 1个或者0个匹配(等于{0,1})
{n} 指定数目的匹配
{n,} 不少于指定数目的匹配
{n,m} 匹配数目的范围(m不超过255)
例子:select prod_name from products where prod_name REGEXP '[[:DIGIT:]]{4}';
如前所述,[:digit:]匹配任意数字,因而它为数字的一个几何。
11. 定位符
^ 文本的开始
& 文本的结尾
[[:<:]] 词的开始
[[:>:]] 词的结尾
select * from wp_posts where post_name REGEXP 'hello'; 可以检索出列post_name中所有包含hello的行
2. .匹配除\n之外的任意单个字符
select * from wp_posts where post_name REGEXP '.og';
.是正则表达式中里一个特殊的字符。它表示匹配一个字符,因此,bog,cog,dog等等都能匹配。
注意:
关于大小写的区分:MySQL中正则表达式匹配(从版本3.23.4后)不区分大小写 。
如果要区分大小写,应该使用BINARY关键字,如where post_name REGEXP BINARY 'Hello .000'
3. ^匹配字符串开始位置,如查询所有姓王的人名
select name from 表名 where name REGEXP '^王';
4. $匹配字符串结束位置,如查询所有姓名末尾是“明”的人名
select name from 表名 where name REGEXP '明$';
5. OR匹配
为了搜索多个串之一,使用|
select * from products where pro_id REGEXP '1000|2000';
这样就1000和2000都能匹配并返回,当然,使用多个|就可以匹配多个串
6. []匹配几个字符
例如,这样将要匹配[0123456789]可以匹配0到9,[1-4][4-9]也是合法的范围。
此外,范围不一定只是数值的,[a-z]匹配任意字母字符
如查询出w/z/s开头的的人名
SELECT prod_name FROM products WHERE prod_name REGEXP '^[wzs]';
7. [^……],匹配不包含在[]的字符,如查询出除chenmin之外的人名
SELECT prod_name FROM products WHERE prod_name REGEXP '[^chenmin]';
8. 匹配特殊字符使用\进行转义
\\.能够匹配.
\\f换页
\\n换行
\\r回车
\\t制表
\\纵向制表
注意:为了匹配\本身,需要使用\\\9. 匹配字符类
[:alnum:] 任意字母和数字(通[a-zA-Z0-9])
[:alpha:] 任意字符(同[a-zA-Z])
[:blank:] 空格和制表符(同[\\t])
[:digit:] 任意数字(同[0-9])
[:lower:] 任意小写字母
[:upper:] 任意大写字母
[:space:] 包括空格在内的任意空白字符
10. 匹配多个实例,关于重复元字符
* 0个或者多个匹配
+ 1个或者多个匹配(等于{1,})
? 1个或者0个匹配(等于{0,1})
{n} 指定数目的匹配
{n,} 不少于指定数目的匹配
{n,m} 匹配数目的范围(m不超过255)
a*
可以写成a{0,}
a+
可以写成a{1,}
a?
可以写成a{0,1}
例子:select prod_name from products where prod_name REGEXP '[[:DIGIT:]]{4}';
如前所述,[:digit:]匹配任意数字,因而它为数字的一个几何。
[[:digit:]]{4}匹配连在一起的任意4位数字,当然,上面的例子也可以这样写REGEXP '[0-9][0-9][0-9][0-9]'
SELECT name FROM tab1 WHERE name REGEXP 'a*'; 匹配0个和多个a
11. 定位符
^ 文本的开始
& 文本的结尾
[[:<:]] 词的开始
[[:>:]] 词的结尾
通过使用这些定位符,能够使REGEXP起类似LIKE的作用
查询找到所有的名字以'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(表示匹配)
|
[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(表示不匹配)
|