定义
正则表达式实际上是描述了一种字符串匹配的模式。
作用
检查一个串是否含有某种子串,
实际中经常在数据质量中用来检查某个字符串是否符合某种标准。
MySQL 正则表达式
一个简单的示例
1、查询字符串是否存在数字0-9(0:无,1:有)【不使用数据库表,仅仅查询某个字符串中是否含有数字0-9】
select 'qwrt23a' regexp '[0-9]';
2、查询表中有“o”的结果【使用数据库表】. : 匹配除“\n”之外的任意单个字符,*匹配前面的子表达式零次或多次,
select * from t_user where loginName regexp '.*o';
3、查询表中以“o”为结尾的结果【使用数据库表】$ : 匹配输入字符串的结束位置
select * from t_user where loginName regexp '.*o$';
空白元字符
元字符 | 描述 |
[ ... ] | 字符集合。匹配所包含的任意一个字符。 |
. | 匹配除 "\n" 之外的任何单个字符。 |
^ | 匹配输入字符串的开始位置。 |
$ | 匹配输入字符串的结束位置。 |
[^...] | 负值字符集合。匹配未包含的任意字符 |
| | 与 “or”的用法一致,匹配 _或_ |
* | 零次或多次匹配前面的子表达式 |
+ | 一次或多次匹配前面的子表达式 |
{n} | n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。 |
{n,m} | m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。 |
测试上述空白元字符
1、查询以t开头的所有信息
select * from t_user where loginName regexp '^t'
2、查询以o结尾的所有信息
select * from t_user where loginName regexp '.*o$';
3、查询字符串中除“\n”的所有信息
select * from t_user where loginname regexp '.'
4、查询字符串中有任意o或者t的所有信息
select * from t_user where loginname regexp '[ot]'
5、查询各字符串中没有o或者t的所有信息
select * from t_user where loginname regexp '[^ot]'
6、查询字符串中有to和tom的所有信息
select * from t_user where loginname regexp 'to|tom'
select * from t_user where loginname regexp 'to(|m)'
7、查询各字符串中出现1次t 0/多次o的所有信息
select * from t_user where loginname regexp 'to*'
8、查询各字符串中出现1次t 1/多次o的所有信息
select * from t_user where loginname regexp 'to+'
9、查询各字符串中出现1次o的所有信息
select * from t_user where loginname regexp 'o{1}'
10、查询各字符串中出现最多1次o,最少0次o的所有信息
select * from t_user where loginname regexp 'o{0,1}'
小型案例(MySQL验证邮箱是否正确)
一般域名的规律为“[N级域名][三级域名.]二级域名.顶级域名”
顶级域名一般为2~4位(如cn、com、club)
原始数据
select email
from testze
where email regexp ( '^[a-z0-9]+[a-z0-9._-]+@[a-z0-9.-]+\\.[a-z]{2,4}$');
结果