正则表达式不适用于 mysql 的 REGEXP

Regex not working with mysql's REGEXP

问题:

我想获取所有包含子域的记录。

一些子域在 http:// 之后以 www. 为前缀保存,但并非所有子域都是。

示例

http://www.sub.domain.comhttp://sub.domain.com

我有这个 工作 正则表达式,我已经在 RegExr:

上测试过

^(http:\/\/)(www\.)?(\w)+(\.)(\w)+(.)(\w|\/){2,10}

这两个例子都很好地匹配。

然而,当我尝试在使用 REGEXP 的查询中使用此正则表达式时,mysql returns 0 条记录。

我试过了:

SELECT * FROM `front` WHERE `domain` REGEXP '^(http:\/\/)(www\.)?(\w)+(\.)(\w)+(\.)(\w|\/){2,10}$';

SELECT * FROM `front` WHERE `domain` REGEXP '/^(http:\/\/)(www\.)?(\w)+(\.)(\w)+(\.)(\w|\/){2,10}$/';

SELECT * FROM `front` WHERE `domain` REGEXP '/^(http:\/\/)(www\.)?(\w)+(\.)(\w)+(\.)(\w|\/){2,10}$/g';

其中所有 return 条记录。

TL;DR

我的正则表达式在 MySQL 的 REGEXP 函数中使用时似乎不起作用。

就在the documentation:

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 中不支持 \w 元字符。使用 [A-Za-z0-9_] 代替:

SELECT * FROM `front` WHERE `domain` REGEXP '^(http:\/\/)(www\.)?([A-Za-z0-9_])+(\.)([A-Za-z0-9_])+(.)([A-Za-z0-9_]|\/){2,10}$';