zoukankan      html  css  js  c++  java
  • MySQL REGEXP正则表达式

    首先说下LIKE命令都涉及到的通配符:

    • % 替代一个或多个字符
    • _ 仅替代一个字符
    • [charlist] 字符列中的任何单一字符
    • [^charlist]或者[!charlist] 不在字符列中的任何单一字符

    其中搭配以上通配符可以让LIKE命令实现多种技巧:

    1、LIKE'Mc%' 将搜索以字母 Mc 开头的所有字符串(如 McBadden)。

    2、LIKE'%inger' 将搜索以字母 inger 结尾的所有字符串(如 Ringer、Stringer)。

    3、LIKE'%en%' 将搜索在任何位置包含字母 en 的所有字符串(如 Bennet、Green、McBadden)。

    4、LIKE'_heryl' 将搜索以字母 heryl 结尾的所有六个字母的名称(如 Cheryl、Sheryl)。

    5、LIKE'[CK]ars[eo]n' 将搜索下列字符串:Carsen、Karsen、Carson 和 Karson(如 Carson)。

    6、LIKE'[M-Z]inger' 将搜索以字符串 inger 结尾、以从 M 到 Z 的任何单个字母开头的所有名称(如 Ringer)。

    7、LIKE'M[^c]%' 将搜索以字母 M 开头,并且第二个字母不是 c 的所有名称(如MacFeather)。

    不过,MySQL 、SQLite 只支持 % 和 _ 通配符,不支持 [^charlist] 或 [!charlist] 通配符( MS Access 支持,微软 office 对通配符一直支持良好,但微软有时候的通配符不支持 %,而是 *,具体看对应软件说明)。通配符和正则不是一回事。

    MySQL 和 SQLite 会把 like '[xxx]yyy' 的中括号当成普通字符,而不是通配符。

    比如:

    select * from persons WHERE City LIKE '[b]eijing'

    将查出 city 为 [b]eijing 的行,而不是 city 为 beijing 的行。

    MySQL 中要完成 [^charlist] 或 [!charlist] 通配符的查询效果,需要通过正则表达式来完成。

    select * from persons WHERE City REGEXP '[b]eijing' SQLite不支持Regexp正则方法。

    (^)字符

    匹配字符串的开始位置,如“^a”表示以字母a开头的字符串。

    mysql> SELECT name FROM person_tbl WHERE name REGEXP "^st";

    ($)字符

    匹配字符串的结束位置,如“X$”表示以字母X结尾的字符串。

    mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$';

    (.)字符

    这个字符就是英文下的点,它匹配任何一个字符,包括回车、换行等。

    (*)字符

    星号匹配0个或多个字符,在它之前必须有内容。如:

    mysql> select "Ban" REGEXP "^Ba*n"; -> 1(表示匹配) 
    mysql> select "Baaan" REGEXP "^Ba*n"; -> 1(表示匹配) 
    mysql> select "Bn" REGEXP "^Ba*n"; -> 1(表示匹配)

    (+)字符

    加号匹配1个或多个字符,在它之前也必须有内容。加号跟星号的用法类似,只是星号允许出现0次,加号则必须至少出现一次。

    mysql> select "Ban" REGEXP "^Ba+n"; -> 1(表示匹配) 
    mysql> select "Bn" REGEXP "^Ba+n"; -> 0(表示不匹配)

    (?)字符

    问号匹配0次或1次。

    mysql> select "Bn" REGEXP "^Ba?n"; -> 1(表示匹配) 
    mysql> select "Ban" REGEXP "^Ba?n"; -> 1(表示匹配) 
    mysql> select "Baan" REGEXP "^Ba?n"; -> 0(表示不匹配)

    a*

    可以写成a{0,}

    a+

    可以写成a{1,}

    a?

    可以写成a{0,1}

      在{}内只有一个整型参数i,表示字符只能出现i次;在{}内有一个整型参数i,后面跟一个“,”,表示字符可以出现i次或i次以上;在{}内只有一个整型参数i,后面跟一个“,”,再跟一个整型参数j,表示字符只能出现i次以上,j次以下(包括i次和j次)。其中的整型参数必须大于等于0,小于等于 RE_DUP_MAX(默认是255)。 如果有两个参数,第二个必须大于等于第一个。

    (abc)*

    匹配任意多个abc(包括空串)

    mysql> select "pi" REGEXP "^(pi)*$"; -> 1(表示匹配) 
    mysql> select "pip" REGEXP "^(pi)*$"; -> 0(表示不匹配) 
    mysql> select "pipi" REGEXP "^(pi)*$"; -> 1(表示匹配)

    查询找到所有的名字包函'mar'的字符串

    mysql> SELECT name FROM person_tbl WHERE name REGEXP 'mar';
     查询找到所有名称以元音开始和‘ok’结束
    mysql> SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';

    [a-dX]

    匹配“a”、“b”、“c”、“d”或“X”

    [^a-dX]

    匹配除“a”、“b”、“c”、“d”、“X”以外的任何字符。

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

    正则匹配邮箱

    ^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+[.][a-zA-Z0-9_-]+$

    要匹配.需要加转义字符,并且必须放在[ ]里

    正则匹配身份证号

     ([1-9]d{5}[12]d{3}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])d{3}[0-9xX])$

     匹配移动电话

     中国移动 134.135.136.137.138.139.150.151.152.157.158.159.187.188 ,147

    ^1(3[4-9]|5[012789]|8[78])d{8}$
  • 相关阅读:
    PAT A1094 The Largest Generation (25 分)——树的bfs遍历
    PAT A1055 The World's Richest (25 分)——排序
    PAT A1052 Linked List Sorting (25 分)——链表,排序
    PAT A1076 Forwards on Weibo (30 分)——图的bfs
    辅导员
    辅导员面试
    C程序设计
    Excel VBA 基本概念
    Excel函数
    导入excel表的数据到数据库ssh
  • 原文地址:https://www.cnblogs.com/qiuyuyu/p/11326894.html
Copyright © 2011-2022 走看看