正则表达式不使用mysql的REGEXP

时间:2015-01-07 14:05:28

标签: mysql regex

问题:

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

某些子域名在www.之后以http://为前缀保存,但并非全部都是。

示例

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

我已经在RegExr测试了这个工作正则表达式:

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

很好地匹配这两个例子。

但是当我在使用REGEXP的查询中尝试使用此正则表达式时,mysql返回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';

所有返回0条记录。

TL; DR

在MySQL REGEXP函数中使用时,我的工作REGEX似乎不起作用。

2 个答案:

答案 0 :(得分:3)

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}$';

答案 1 :(得分:1)

就在the documentation

  

因为MySQL在字符串中使用C转义语法(例如,“\ n”表示换行符),所以必须将在REGEXP字符串中使用的任何“\”加倍。