MySQL 正则表达式匹配至少 2 个点

标签 mysql sql regex

考虑以下正则表达式

@(.*\..*){2,}

预期行为:

a@b doesnt match
a@b.c doesnt match
a@b.c.d matches
a@b.c.d.e matches
and so on

在正则表达式中测试它按预期工作。

在 mysql select 中使用它无法按预期工作。查询:

SELECT * FROM `users` where mail regexp '@(.*\..*){2,}'

返回类似

的行
foo@example.com

不应匹配给定的正则表达式。为什么?

最佳答案

我想你的问题的答案就在这里。

Because MySQL uses the C escape syntax in strings (for example, “\n” to represent the newline character), you must double any “\” that you use in your REGEXP strings.

MYSQL Reference

因为你的中间点没有被正确转义,它被当作另一个通配符,最后你的表达式被有效地折叠为 @.{2,}@..+

@anubhava 的回答可能是你尝试做的更好的替代品,尽管我会注意到@dasblinkenlight 关于使用字符类 [.] 的评论,这将使你很容易放入正则表达式已经在 RegexPal 进行了测试。

关于MySQL 正则表达式匹配至少 2 个点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33695967/

相关文章:

sql - 在 magento catal 中按 2 个属性对产品进行排序

ruby - 今日正则表达式突击测验 :D

python - 在 Python 中解析 TCL 列表

MYSQL 内连接 OR 条件

从 4.1 升级到 MySQL 5.5 后,Php-MySQL UPDATE & INSERT 停止工作

mysql表设计

Java正则表达式匹配器 - 多个组

PHP 模板非常慢

mysql - 如何获取几列的最小日期(不包括空值)?

sql - 在 Oracle 中哪里可以找到表的段?