MySQL正则表达式

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)

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(表示不匹配)

  • 22
    点赞
  • 102
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值