我一直在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[[./.]]'"
然而,当它真的应该返回更多(超过一千)时,它只返回一行。我对查询犯了什么错误?
答案 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';