美文网首页嵌牛IT观察
数据库学习(五)

数据库学习(五)

作者: 大猫_23fe | 来源:发表于2018-07-06 14:47 被阅读0次

    顾颖17021223250

    转载自https://blog.csdn.net/qq_22238021/article/details/80929518

    【嵌牛导读】:MySQL正则表达式

    【嵌牛鼻子】: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'开头

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

    查询找到所有的名字以'ok'结尾

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

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

    mysql> SELECT name FROM person_tbl WHERE name REGEXP 'mar';

    查询找到所有名称以元音开始和'ok'结束 的

    mysql> SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';

    一个正则表达式中的可以使用以下保留字

    ^

    所匹配的字符串以后面的字符串开头

    mysql> select "fonfo" REGEXP "^fo$"; -> 0(表示不匹配)

    mysql> select "fofo" REGEXP "^fo"; -> 1(表示匹配)

    $

    所匹配的字符串以前面的字符串结尾

    mysql> select "fono" REGEXP "^fono$"; -> 1(表示匹配)

    mysql> select "fono" REGEXP "^fo$"; -> 0(表示不匹配)

    .

    匹配任何字符(包括新行)

    mysql> select "fofo" REGEXP "^f.*"; -> 1(表示匹配)

    mysql> select "fonfo" REGEXP "^f.*"; -> 1(表示匹配)

    a*

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

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

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

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

    a+

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

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

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

    a?

    匹配一个或零个a

    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

    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(包括空串)

    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”以外的任何字符。

    “[”、“]”必须成对使用

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

    相关文章

      网友评论

        本文标题:数据库学习(五)

        本文链接:https://www.haomeiwen.com/subject/cszvuftx.html