MySQL的正则表达式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL的正则表达式相关的知识,希望对你有一定的参考价值。

1.  mysql的正则表达式仅仅使SQL语言的一个子集,可以匹配基本的字符、字符串。 
例如:select * from wp_posts where post_name REGEXP \'hello\',可以检索出列post_name中所有包含hello的行 
    REGEXP \'.og\'  .是正则表达式中里一个特殊的字符。它表示匹配一个字符,因此,dog,hog,mog等等都能匹配。


注意: 
    关于LIKE和REGEXP的区别:LIKE匹配整个列。如果被匹配的文本仅在列值中出现,LIKE并不会找到它,相应的行也不会返回(当然,使用通配符除外)。而REGEXP在列值内进行匹配,如果被匹配的匹配的文本在列值中出现,REGEXP将会找到它,相应的行将被返回,这时一个非常重要的差别(当然,如果适应定位符号^和$,可以实现REGEXP匹配整个列而不是列的子集)。 
    关于大小写的区分:MySQL中正则表达式匹配(从版本3.23.4后)不区分大小写 。如果要区分大小写,应该使用BINARY关键字,如where post_name REGEXP BINARY \'Hello .000\'


2.关于OR匹配 
    为了搜索两个串之一,使用|, 如,select * from products where pro_id REGEXP \'1000|2000\'  ORDER BY pro_id; 
    这样就1000和2000都能匹配并返回,当然,使用多个|就可以匹配多个串


3.只是匹配几个字符[] 
    例如,这样将要匹配[0123456789]可以匹配0到9,[1-4][4-9]也是合法的范围。此外,范围不一定只是数值的,[a-z]匹配任意字母字符 
    如:SELECT prod_name FROM products WHERE prod_name REGEXP \'[1-5] Ton\' ORDER BY prod_name;


4.匹配特殊字符使用\\进行转义 
    \\\\.能够匹配. 
    \\\\f换页 
    \\\\n换行 
      \\\\r回车 
    \\\\t制表 
    \\\\纵向制表


注意:为了匹配\\本身,需要使用\\\\\\


5.匹配字符类 
    [:alnum:]    任意字母和数字(通[a-zA-Z0-9]) 
    [:alpha:]     任意字符(同[a-zA-Z]) 
     [:blank:]    空格和制表符(同[\\\\t]) 
     [:digit:]     任意数字(同[0-9]) 
     [:lower:]  任意小写字母 
     [:upper:]   任意大写字母 
     [:space:]   包括空格在内的任意空白字符


6.匹配多个实例,关于重复元字符 
*      0个或者多个匹配 
+     1个或者多个匹配(等于{1,}) 
?     1个或者多个匹配(等于{0,1}) 
{n}    指定数目的匹配 
{n,}   不少于指定数目的匹配 
{n,m}    匹配数目的范围(m不超过255)


例子:  select prod_name from products where prod_name REGEXP \'[[:DIGIT:]]{4}\'   ,如前所述,[:digit:]匹配任意素子,因而它为数字的一个几何。{4}确切的要求它前面的字符(任意数字)出现3此,所以[[:digit:]]{4}匹配连在一起的任意4位数字,当然,上面的例子也可以这样写REGEXP \'[0-9][0-9][0-9][0-9]\'


7.定位符 
^  文本的开始 
&  文本的结尾 
[[:<:]]   词的开始 
[[:>:]]   词的结尾 
通过使用这些定位符,能够使REGEXP起类似LIKE的作用

 

from: http://www.cnblogs.com/fuyunbiyi/archive/2012/03/29/2423489.html

以上是关于MySQL的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

MySQL正则表达式

MySQL正则表达式问题

mysql支不支持正则表达式里的零宽断言

MySQL正则表达式匹配

MySQL 正则表达式

MySQL中REGEXP正则表达式使用大全