关于今天在刷题碰到mysql的正则表达式的问题

在力扣刷题的过程中碰到这么个问题:
写一条 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$'