问题:
我想获取包含子域的所有记录。
某些子域名在www.
之后以http://
为前缀保存,但并非全部都是。
示例:
http://www.sub.domain.com
和http://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似乎不起作用。
答案 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)
因为MySQL在字符串中使用C转义语法(例如,“\ n”表示换行符),所以必须将在REGEXP字符串中使用的任何“\”加倍。