考虑以下正则表达式
@(.*\..*){2,}
Run Code Online (Sandbox Code Playgroud)
预期行为:
a@b doesnt match
a@b.c doesnt match
a@b.c.d matches
a@b.c.d.e matches
and so on
Run Code Online (Sandbox Code Playgroud)
在正则表达式中测试它按预期工作。
在 mysql select 中使用它不能按预期工作。询问:
SELECT * FROM `users` where mail regexp '@(.*\..*){2,}'
Run Code Online (Sandbox Code Playgroud)
返回像这样的行
foo@example.com
Run Code Online (Sandbox Code Playgroud)
不应与给定的正则表达式匹配。为什么?
我想你的问题的答案就在这里。
\n\n\n\n\n\n\n由于 MySQL 在字符串中使用 C 转义语法(例如 \xe2\x80\x9c\\n\xe2\x80\x9d\n 来表示换行符),因此必须将任何 \xe2\x80\x9c\\\ 翻倍您在 REGEXP 字符串中使用的 xe2\x80\x9d。
\n
因为你的中间点没有正确转义,所以它被视为另一个通配符,最后你的表达式实际上被折叠为@.{2,}或@..+
@anubhava\'s 的答案可能是你尝试做的更好的替代品,尽管我会注意到 @dasblinkenlight\'s 关于使用字符类的评论,[.]这将使得你可以轻松地放入你已经测试过的正则表达式正则表达式Pal。