美文网首页我爱编程
【MySQL必知必会】第9章:正则表达式搜索

【MySQL必知必会】第9章:正则表达式搜索

作者: 100gle | 来源:发表于2018-04-09 16:33 被阅读26次

    9.1 正则表达式介绍

    正则表达式是用来匹配文本的特殊的串(字符集合),并且在所有操作系统、文本编辑器等都支持正则表达式

    9.2 使用正则表达式

    MySQL用WHERE子句来支持正则表达式检索,并且通过REGEXP(regular expression)来连接检索条件:

    #基础用法
    SELECT prod_name 
    FROM products
    WHERE prod_name REGEXP '1000'
    ORDER BY prod_name;
    
    #正则通配符
    SELECT prod_name 
    FROM products
    WHERE prod_name REGEXP '.000'
    ORDER BY prod_name;
    

    LIKE和REGEXP之间一个重要差别:

    LIKE匹配整个列

    • 如果被匹配的文本在列值中出现,LIKE将不会找到它,相应的行也不被返回(除非使用通配符)

    REGEXP在列值内进行匹配

    • 如果被匹配的文本在列值中出现,REGEXP将会找到它,相应的行将被返回。

    虽然REGEXP不能匹配整个列值,但是如果借助定位符(^和$)可以起到和LIKE相同的作用

    9.3 OR的正则表达式运用

    「|」符号的用法

    在正则表达式中可以使用「|」符号来表示「或」(OR),即可起到类似于select中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'
    #等价于 REGEXP '[1|2|3] Ton'
    #等价于 REGEXP '[1-3] Ton'
    ORDER BY prod_name;
    
    • 除了数字之外,[]内还可以定义字母字符,例如[a-z]

    9.4 特殊字符匹配

    除了匹配一般的字母、数字之外,有时可能还需要匹配某些带有特殊符号的文本,例如「.」等;但是这些字符在正则表达式中可能会有着其他用法,因此对待这些字符时需要格外小心:

    SELECT vend_name
    FROm vendors
    WHERE vend_name REGEXP '\\.'
    ORDER BY vend_name;
    
    • 其中「\」斜杠表示转义符,但是使用两个转义符的原因是MySQL要求解释一个,正则表达式库解释另外一个,这可能与其他软件有所区别

    9.5 匹配多个实例

    重复元字符

    有时需要对匹配的数目进行更强的控制。例如,需要寻找所有的数,不管数中包含多少数字;或者你可能想寻找一个单词并且还能够适应一个尾 随的s(如果存在),等等;这是就需要用到重复元字符来进行操作:

    • 「*」:表示0个或多个匹配
    • 「+」:表示1个或多个匹配(等于{1,})
    • 「?」:表示0个或1个匹配(等于{0,1})
    • 「{n}」:表示指定数目匹配
    • 「{n,}」:表示大于或等于n
    • 「{n, m}」:表示$n<=i<=m$
    SELECT prod_name
    FROM products
    WHERE prod_name REGEXP '\\([0-9] sticks?\\)'
    
    • 「\(」和「\)」分别匹配「(」和「)」
    • 「?」匹配stick和sticks(?表示匹配它前面的字符出现0次或1次)

    9.6 定位符

    如果想匹配特定位置的文本,就需要用到定位符来进行定位:

    • 「^」表示文本开头
    • 「$」表示文本结尾
    SELECT prod_name
    FROM products
    WHERE prod_name REGEXP '^[0-9\\.]'
    ORDER BY prod_name;
    

    「^」有两种用法:一种是来指定字符串的开始,另一种就是在集合中用[和]定义,用来否定该集合,即匹配除了该集合外的条件,^[abc]

    相关文章

      网友评论

        本文标题:【MySQL必知必会】第9章:正则表达式搜索

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