- 学习:知识的初次邂逅
- 复习:知识的温故知新
练习:知识的实践应用
目录
一,原题力扣链接
二,题干
表:
Users
+---------------+---------+ | Column Name | Type | +---------------+---------+ | user_id | int | | name | varchar | | mail | varchar | +---------------+---------+ user_id 是该表的主键(具有唯一值的列)。 该表包含了网站已注册用户的信息。有一些电子邮件是无效的。编写一个解决方案,以查找具有有效电子邮件的用户。
一个有效的电子邮件具有前缀名称和域,其中:
- 前缀 名称是一个字符串,可以包含字母(大写或小写),数字,下划线
'_'
,点'.'
和/或破折号'-'
。前缀名称 必须 以字母开头。- 域 为
'@leetcode.com'
。以任何顺序返回结果表。
结果的格式如以下示例所示:
示例 1:
输入: Users 表: +---------+-----------+-------------------------+ | user_id | name | mail | +---------+-----------+-------------------------+ | 1 | Winston | winston@leetcode.com | | 2 | Jonathan | jonathanisgreat | | 3 | Annabelle | bella-@leetcode.com | | 4 | Sally | sally.come@leetcode.com | | 5 | Marwan | quarz#2020@leetcode.com | | 6 | David | david69@gmail.com | | 7 | Shapiro | .shapo@leetcode.com | +---------+-----------+-------------------------+ 输出: +---------+-----------+-------------------------+ | user_id | name | mail | +---------+-----------+-------------------------+ | 1 | Winston | winston@leetcode.com | | 3 | Annabelle | bella-@leetcode.com | | 4 | Sally | sally.come@leetcode.com | +---------+-----------+-------------------------+ 解释: 用户 2 的电子邮件没有域。 用户 5 的电子邮件带有不允许的 '#' 符号。 用户 6 的电子邮件没有 leetcode 域。 用户 7 的电子邮件以点开头。
三,建表语句
Create table If Not Exists Users (user_id int, name varchar(30), mail varchar(50));
Truncate table Users;
insert into Users (user_id, name, mail) values ('1', 'Winston', 'winston@leetcode.com');
insert into Users (user_id, name, mail) values ('2', 'Jonathan', 'jonathanisgreat');
insert into Users (user_id, name, mail) values ('3', 'Annabelle', 'bella-@leetcode.com');
insert into Users (user_id, name, mail) values ('4', 'Sally', 'sally.come@leetcode.com');
insert into Users (user_id, name, mail) values ('5', 'Marwan', 'quarz#2020@leetcode.com');
insert into Users (user_id, name, mail) values ('6', 'David', 'david69@gmail.com');
insert into Users (user_id, name, mail) values ('7', 'Shapiro', '.shapo@leetcode.com');
insert into Users (user_id, name, mail) values ('8', 'Shapiro', '1.shapo@leetcode.com');
insert into Users (user_id, name, mail) values ('9', 'Shapiro', '-1.shapo@leetcode.com');
insert into Users (user_id, name, mail) values ('10', 'Shapiro2', '-a.shapo@leetcode.com');
insert into Users (user_id, name, mail) values ('11', 'Shapiro1', '_Refael@leetcode.com ');
insert into Users (user_id, name, mail) values ('11', 'Shapiro1', '_Refael@leetcode?com ');
insert into Users (user_id, name, mail) values ('11', 'Shapiro1', 'winston@leetcode?com ');
四,分析
题解:
表:用户表
字段:用户id,用户姓名,用户邮箱
要求:剔除邮箱字段 符合 标准的条目
条件1 邮箱必须以 字母开头 不区分大小写
条件2 后缀必须以@leetcode.com结束;
条件3 除首字母 @前面的 可以是- 可以是. 也可是数字字母(不区分大小写)
'^[A-Za-z][A-Za-z0-9_.-]*@leetcode\\.com$'解析
^ 表示开头;
[A-Za-z] 表示字母开头 不区分大小写;
[A-Za-z0-9_.-] 表示 可以字母大小写,数字,也可以是_ - .
* 是匹配0次到多次
\\. 是转义
$ 是结束
五,SQL解答
select * from users where mail regexp '^[A-Za-z][A-Za-z0-9_.-]*@leetcode\\.com$';
六,验证
七,知识点总结
正则复习
正则规则:
- 正则 最常见的字符:
- \d匹配数字,
- \D 匹配非数字
- \w #匹配所有字母汉字和数字
- \W #匹配所有特殊字符
- \S 是匹配非空白字符
- \s 是匹配空白字符
- + 表示至少1次或者多次
- * 表0次或者多次
- [] 是匹配里面的任何一个字符
- {} 是匹配的次数
- ^ 是开头
- $ 是结尾
- 学习:知识的初次邂逅
- 复习:知识的温故知新
练习:知识的实践应用