表: Users
+---------------+---------+ | Column Name | Type | +---------------+---------+ | user_id | int | | name | varchar | | mail | varchar | +---------------+---------+ user_id 是该表的主键(具有唯一值的列)。 该表包含了网站已注册用户的信息。有一些电子邮件是无效的。
编写一个解决方案,以查找具有有效电子邮件的用户。
一个有效的电子邮件具有前缀名称和域,其中:
- 前缀 名称是一个字符串,可以包含字母(大写或小写),数字,下划线
'_'
,点'.'
和/或破折号'-'
。前缀名称 必须 以字母开头。 - 域 为
'@leetcode.com'
。
以任何顺序返回结果表。
结果的格式如以下示例所示:
示例 1:
输入: Users 表: +---------+-----------+-------------------------+ | user_id | name | mail | +---------+-----------+-------------------------+ | 1 | Winston | [email protected] | | 2 | Jonathan | jonathanisgreat | | 3 | Annabelle | [email protected] | | 4 | Sally | [email protected] | | 5 | Marwan | quarz#[email protected] | | 6 | David | [email protected] | | 7 | Shapiro | [email protected] | +---------+-----------+-------------------------+ 输出: +---------+-----------+-------------------------+ | user_id | name | mail | +---------+-----------+-------------------------+ | 1 | Winston | [email protected] | | 3 | Annabelle | [email protected] | | 4 | Sally | [email protected] | +---------+-----------+-------------------------+ 解释: 用户 2 的电子邮件没有域。 用户 5 的电子邮件带有不允许的 '#' 符号。 用户 6 的电子邮件没有 leetcode 域。 用户 7 的电子邮件以点开头。
本题考查正则表达式的应用。
常用的正则表达式字符和特殊字符有:
①普通字符:表示匹配该字符本身,如a表示匹配字母"a"。
②元字符:具有特殊含义的字符,如 . 表示匹配除换行符以外的任意字符。
③字符类:用[ ]表示,表示匹配括号内的任意一个字符,如[abc]表示匹配字符"a"、“b"或"c”。
④反义字符类:用[^]表示,表示匹配除括号内字符以外的任意字符,如[^abc]表示匹配除"a"、“b”、"c"以外的任意字符。
⑤重复字符:用*、+、?表示,分别表示匹配前一个字符0次或多次、1次或多次、0次或1次。
⑥边界匹配:用^、$表示,分别表示匹配字符串的开头和结尾。
⑦分组:用()表示,可以将多个字符组合为一个整体,如(ab)+表示匹配"ab"、“abab”等。
⑧转义字符:用\表示,可以将特殊字符转义为普通字符,如\.表示匹配字符"."。
正则表达式的用法有:
匹配:使用match()函数在字符串中查找匹配正则表达式的部分,并返回一个包含匹配结果的数组。
查找:使用search()函数在字符串中查找匹配正则表达式的部分,并返回第一个匹配的位置。
替换:使用replace()函数将字符串中匹配正则表达式的部分替换为指定的内容。
分割:使用split()函数根据正则表达式将字符串分割为多个部分,并返回一个数组。
其他用法:
量词:用来指定前面的字符或字符类的重复次数。
常用的量词有:
*:匹配前一个字符0次或多次。
+:匹配前一个字符1次或多次。
?:匹配前一个字符0次或1次。
{n}:匹配前一个字符恰好n次。
{n,}:匹配前一个字符至少n次。
{n,m}:匹配前一个字符至少n次,最多m次。
特殊字符:
.:匹配除换行符以外的任意字符。
\d:匹配数字字符。
\D:匹配非数字字符。
\w:匹配字母、数字、下划线字符。
\W:匹配非字母、数字、下划线字符。
\s:匹配空白字符(空格、制表符、换行符等)。
\S:匹配非空白字符。
\b:匹配单词边界。
\B:匹配非单词边界。
分组和引用:
():将多个字符组合为一个整体。
(?:):非捕获分组,用于只匹配但不捕获。
\1、\2、…:引用前面的分组,用于匹配相同的内容。
断言:
(?=...):正向肯定前瞻,用于匹配满足某个条件的位置。
(?!...):正向否定前瞻,用于匹配不满足某个条件的位置。
(?<=...):反向肯定后顾,用于匹配位于某个条件之后的位置。
(?<!...):反向否定后顾,用于匹配不位于某个条件之后的位置。
select
*
from
users
where
mail REGEXP "^([a-z|A-Z])[a-z|A-Z|0-9|_|\.|\/|\-]*(@leetcode[\.]com)$"
标签:字符,匹配,正则表达式,查找,+---------+-----------+-------------------------+,sql,邮箱,com,leet
From: https://blog.csdn.net/JYXCCC/article/details/139576143