題目
表:?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$'