正则表达式不适用于 mysql 的 REGEXP
Regex not working with mysql's REGEXP
问题:
我想获取所有包含子域的记录。
一些子域在 http://
之后以 www.
为前缀保存,但并非所有子域都是。
示例:
http://www.sub.domain.com
和 http://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
函数中使用时似乎不起作用。
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}$';
问题:
我想获取所有包含子域的记录。
一些子域在 http://
之后以 www.
为前缀保存,但并非所有子域都是。
示例:
http://www.sub.domain.com
和 http://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
函数中使用时似乎不起作用。
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}$';