MySQL正则表达式只返回一行

时间:2012-07-04 16:27:27

标签: mysql regex

我一直在MySQL编写REGEX来识别那些拥有.com TLD的域名。网址通常为

格式
http://example.com/

我提出的正则表达式看起来像这样:

REGEXP '[[.colon.]][[.slash.]][[.slash.]]([:alnum:]+)[[...]]com[[./.]]'

我们匹配://的原因是我们不会选择http://example.com/error.com/wrong.com等网址

因此我的查询是

SELECT DISTINCT name
FROM table 
WHERE name REGEXP '[[.colon.]][[.slash.]][[.slash.]]([:alnum:]+)[[...]]com[[./.]]'"

然而,当它真的应该返回更多(超过一千)时,它只返回一行。我对查询犯了什么错误?

3 个答案:

答案 0 :(得分:1)

不确定是否存在问题,但应该是[[:alnum:]],而不是[:alnum:]

答案 1 :(得分:0)

您当前的查询仅匹配以name而不是.com/结尾的.com,后跟任何以斜杠开头的内容。请尝试以下方法:

SELECT DISTINCT name
FROM table 
WHERE name REGEXP '[[.colon.]][[.slash.]][[.slash.]]([:alnum:]+)[[...]]com([[./.]].*)?'"

答案 2 :(得分:0)

分割网址可能更清楚,而不是重新编写它

SELECT DISTINCT name FROM table
WHERE SUBSTRING_INDEX((SUBSTRING_INDEX(name,'/',3),'.',-1)='com';