正则表达式通常被用来检索或者替换那些符合某个模式的文本内容,根据指定的匹配模式匹配文本中符合要求的特殊的字符串。eg:从一个文本文件中提取电话号码,查找一篇文章中重复的单词等。
在MysqL中使用REGEXP关键字指定正则表达式的字符匹配模式,REGEXP操作符后常用的匹配字符如下表所示。
选项 | 作用 |
^ | 匹配文本的开始字符 |
$ | 匹配文本的结束字符 |
. | 匹配任何单个字符 |
* | 匹配零个或多个在它前面的字符 |
+ | 匹配前面的字符1次或多次 |
<字符串> | 匹配包含指定字符串的文本 |
[字符集合] | 匹配字符集合中任何一个字符 |
[^] | 匹配不在括号中的任何字符 |
字符串{n,} | 匹配前面的字符串至少n次 |
字符串{n,m} | 匹配前面的字符串至少n次、至多m次。如果n=0,此参数为可选参数。 |
例1 查学生表中s_name字段以字母“王”开头的记录。
查询语句:
SELECT * FROM student WHERE s_name REGEXP ‘^王‘;
查询结果:
例2 查学生表中s_name字段以字母“云”结尾的记录。
查询语句:
SELECT * FROM student WHERE s_name REGEXP ‘云$‘
查询结果:
例3 查询vendors表中vend_id字段值包含字母“B”和“0”并且字母间存在2个其他字母的记录。
查询语句:
SELECT vend_id FROM vendors WHERE vend_id REGEXP ‘B..0‘
查询结果:
例4
例4 查询vendors表中vend_id字段值以字母“BR”开头的记录。
查询语句:
SELECT vend_id FROM vendors WHERE vend_id REGEXP ‘^BR*‘
查询结果:
例5 查询vendors表中vend_name字段值包含字符串"ll"的记录。
查询语句:
SELECT vend_name FROM vendors WHERE vend_name REGEXP ‘ll‘
查询结果:
例6 查询vendors表中vend_name字段值包含字符串"ll"或者“ea”的记录。
查询语句:
SELECT vend_name FROM vendors WHERE vend_name REGEXP ‘ll|ea‘
查询结果:
例6 查询vendors表中vend_name字段值包含字母"l"或者“e”的记录。
查询语句:
SELECT vend_name FROM vendors WHERE vend_name REGEXP ‘[le]‘
查询结果:
例7 查询vendors表中vend_id字段数值包含1或者2的记录。
查询语句:
SELECT * FROM vendors WHERE vend_id REGEXP ‘[1-2]
查询结果:
例8 查询customer表中c_id字段数值包含1到5以外字符的记录。
查询语句:
SELECT * FROM customer WHERE c_id REGEXP ‘[^1-5]‘
查询结果:
例9 查询vendors表中vend_name字段值中出现字母"l"至少2次的记录。
查询语句:
SELECT * FROM vendors WHERE vend_id REGEXP ‘l{2,}‘
查询结果: