MYSQL使⽤正则表达式过滤数据
⼀、正则与LIKE的区别
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'
⼆、基本字符匹配
检索列prod_name 包含⽂本1000的所有⾏:
进⾏OR匹配相当于:或操作 “|”
匹配⼏个字符之⼀只想匹配特定的字符。可以通过指定⼀组⽤[和]括起来的字符来完成。
[456]定义了⼀组字符,他的意思是匹配4或5或6. []是另⼀种形式的OR语句。[456]是[4|5|6]的缩写。匹配范围
[1-3]a-z都是合法的范围
匹配特殊字符
正则表达式语⾔由特殊含义的特殊字符构成。
.在正则表达式中表⽰匹配任何⼀个字符
⽐如匹配prod_name中包括on字符串的⾏:
那如何匹配.,[],|,-?
为了匹配特殊字符,必须⽤\\为前导。⽐如\\.表⽰查·匹配字符类
正则匹配中文字
匹配多个实例
再⽐如匹配连在⼀起的4位数字:
sticks? : s后的?使s可选,因为?匹配它前⾯紧跟的任何字符的0次或者1次出现。
[:digit:]匹配任意数字,因⽽它为数字的⼀个集合。{4}确切地要求它前⾯的字符出现4次。
所以[:digit:]{4}匹配连在⼀起的任意4位数字。
三、定位符
⽬前为⽌所有例⼦都是匹配⼀个串中任意为⽌的⽂本。为了匹配特定为⽌的⽂本,需要使⽤定位符。
也可以在不使⽤数据库的情况下测试正则表达式的正确性:SELECT 来测试正则表达式,REGEXP检查总是返回0或1, SELECT  'HELLO‘  REGEXP '0‘//返回为0
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。