在力扣刷题的过程中碰到这么个问题:
写一条 SQL 语句,查询拥有有效邮箱的用户。
有效的邮箱包含符合下列条件的前缀名和域名:
前缀名是包含字母(大写或小写)、数字、下划线 '_'、句点 '.' 和/或横杠 '-' 的字符串。前缀名必须以字母开头。
域名是 '@leetcode.com' 。
首先我认为在mysql \表示的就是转义字符 于是我的代码是
SELECT
*
FROM Users WHERE mail REGEXP '^[a-zA-Z]+[a-zA-Z0-9\_\./-]{0,}@leetcode\.com$'
但是碰到这个测试用例居然可以匹配 我很不理解为什么这个字符串可以匹配此正则
winston@leetcode?com
于是换成了以下代码才通过
SELECT
*
FROM Users WHERE mail REGEXP '^[a-zA-Z]+[a-zA-Z0-9\_\./-]{0,}@leetcode\\.com$'
但是我认为这个是错误的 \\.
转义完之后应该是 \.
只是测试数据恰好而以所以有没有同学可以解释下
真正的做法是怎么样?
在 MySQL 中,正则表达式是使用 REGEXP 或 RLIKE 操作符来匹配的。
在你的代码中,你使用了 REGEXP 操作符来匹配邮箱地址。
在你的正则表达式中,你使用了 . 来匹配 . 字符,但是在 MySQL 中,. 是特殊字符,需要使用 \. 来转义。
所以你在修改正则表达式时,应该将 . 替换为 \.。
SELECT
*
FROM Users WHERE mail REGEXP '^[a-zA-Z]+[a-zA-Z0-9\_\./-]*@leetcode\\.com$'