Mysql刷题之正则表达式专题
一、基本语法
要找满足正则表达式的字段:
SELECT column FROM table WHERE column REGEXP 'pattern';
-- 或
SELECT column FROM table WHERE column RLIKE 'pattern';
要找不符合正则表达式的字段:
select column from table where column not regexp 'pattern'
二、常用正则元字符
元字符 | 说明 | 示例 |
---|---|---|
^ | 匹配字符串开头 | ^abc → 以 "abc" 开头 |
$ | 匹配字符串结尾 | xyz$ → 以 "xyz" 结尾 |
. | 匹配任意单个字符(除换行符) | a.c → "abc", "a1c" |
* | 匹配前一个字符 0 次或多次 | ab*c → "ac", "abbc" |
+ | 匹配前一个字符 1 次或多次 | ab+c → "abc", "abbc" |
? | 匹配前一个字符 0 次或 1 次 | ab?c → "ac", "abc" |
{n} | 匹配前一个字符恰好 n 次 | a{3} → "aaa" |
{n,} | 匹配前一个字符至少 n 次 | a{2,} → "aa", "aaa" |
[...] | 匹配括号内任意一个字符 | [aeiou] → 匹配任意元音字母 |
[^...] | 不匹配括号内任意字符 | [^0-9] → 非数字字符 |
` | ` | 或操作符 |
() | 分组 | (ab)+ → "ab", "abab" |
[a-z]:表示一个字符范围,匹配从 a 到 z 的任何字符。
[0-9]:表示一个字符范围,匹配从 0 到 9 的任何字符。
[a-zA-Z]:这个变量匹配从 a 到 z 或 A 到 Z 的任何字符。请注意,你可以在方括号内指定的字符范围的数量没有限制,您可以添加想要匹配的其他字符或范围。
[^a-z]:这个变量匹配不在 a 到 z 范围内的任何字符。请注意,字符 ^ 用来否定字符范围,它在方括号内的含义与它的方括号外表示开始的含义不同。
[a-z]*:表示一个字符范围,匹配从 a 到 z 的任何字符 0 次或多次。
[a-z]+:表示一个字符范围,匹配从 a 到 z 的任何字符 1 次或多次。
.:匹配任意一个字符。
\.:表示句点字符。请注意,反斜杠用于转义句点字符,因为句点字符在正则表达式中具有特殊含义。还要注意,在许多语言中,你需要转义反斜杠本身,因此需要使用\\.。
理解:
1.所谓正则表达式其实就是个字符串 , 在匹配的时候,满足这个字符串出现的规则即可。
2.请注意 ,如果要在正则表达式中匹配上面元字符本身 (比如 .),必须加转义字符 \
3.在SQL中 ,反斜杠本身也需要转义 , 也就是说 要再加一个 \ 语法才正确!!
三、相关题目
1. LC 1517 查找拥有有效邮箱的用户
select user_id , name , mail
from Users
where mail regexp '^[a-zA-Z][a-zA-Z0-9_.-]*@leetcode\\.com$'
正则匹配含义如下:
^表示开头,[a-zA-Z]表示第一个字符从a-z,A-Z中随便选一个 ,
[a-zA-Z0-9_.-]* 表示a-z,A-Z,0-9这些字符随便出一个 ,并且可以出现n次或0次
@leetcode 表示前面的字符完了, 之后必须跟上@leetcode
\\. 转义字符 ,对 . 进行转义 ,表示后面必须跟一个 .
com$ 表示com完了 ,整个字符串必须以com作为结尾。
2.LC 1527 患某种疾病的患者
也可以用正则来做