题目
表: Users
编写一个解决方案,以查找具有有效电子邮件的用户。
一个有效的电子邮件具有前缀名称和域,其中:
- 前缀 名称是一个字符串,可以包含字母(大写或小写),数字,下划线
'_'
,点'.'
和/或破折号'-'
。前缀名称 必须 以字母开头。 - 域 为
'@leetcode.com'
。
以任何顺序返回结果表。
结果的格式如以下示例所示:
示例 1:
解题思路
前置知识
Regexpp()
模糊匹配,包含特定字符串
select * from club_content where content regexp ‘车友俱乐部’
select * from club_content where content like ‘%车友俱乐部%’
模糊匹配,以特定字符串开头
select * from club_content where content regexp ‘^车友’
select * from club_content where content like ‘车友%’
模糊匹配,以特定字符串结尾
select * from club_content where content regexp ‘车友$’
select * from club_content where content like ‘%车友’
模糊匹配,或关系
select * from club_content where content REGEXP ‘心得|分享|技术贴’
模糊匹配,不包含单个字符
select * from club_content where content REGEXP [^车友]
这个结果跑出来一看大吃一惊,竟然把所有记录给跑出来,这是为什么呢?
因为一旦加了这个方括号"[]",它就把里面的内容拆成单个的字符再匹配,它会逐个字符去匹配判断是不是等于“车”,或者是不是等于“友“,返回的结果是一组0、1的逻辑值。如果想匹配不包含特定字符串,该怎么实现呢?
模糊匹配,不包含特定字符串
select * from club_content where content not REGEXP ‘车友’
1.题目要求我们 查找具有有效电子邮件的用户,也就是(前缀 名称是一个字符串,可以包含字母(大写或小写),数字,下划线
'_'
,点'.'
和/或破折号'-'
。前缀名称 必须 以字母开头。域 为'@leetcode.com'
。)对于这种题我们可以采用正则表达式进行匹配。2. ^ 匹配以该字符后面的字符开头的字符串,我们应该以字母开头(^[a-zA-Z]),可以包含字母(大写或小写),数字,下划线
'_'
,点'.'
和/或破折号'-'([a-zA-Z0-9_.-]*),
*是一个量词,表示匹配前面的元素零次或多次。3.必须以域结尾域 为
'@leetcode.com',(@leetcode[.]com$),然后我们将三个条件组合在一起就得到了(regexp '^[a-zA-Z][a-zA-Z0-9_.-]*@leetcode[.]com$')这里要注意特殊符号的转义,如果我们将特殊符号放在[]中就不用再进行转义了,否则要在前面加上‘//’。
代码实现
select *
from Users
where mail regexp '^[a-zA-Z][a-zA-Z0-9_.-]*@leetcode[.]com$'