2

我一直在 MySQL 中编写一个 REGEX 来识别那些具有 .com TLD 的域。URL 通常采用以下形式

http://example.com/

我想出的正则表达式如下所示:

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

我们匹配 :// 的原因是我们不会选择 URL,例如http://example.com/error.com/wrong.com

因此我的查询是

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

但是,当它实际上应该返回更多(超过一千)时,它只返回一行。我在查询中犯了什么错误?

4

3 回答 3

2

不确定这是否是问题,但应该是[[:alnum:]],不是[:alnum:]

于 2012-07-04T16:37:24.877 回答
0

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

SELECT DISTINCT name
FROM table 
WHERE name REGEXP '[[.colon.]][[.slash.]][[.slash.]]([:alnum:]+)[[...]]com([[./.]].*)?'"
于 2012-07-04T16:35:12.680 回答
0

拆分 URL 可能比正则表达式更清晰

SELECT DISTINCT name FROM table
WHERE SUBSTRING_INDEX((SUBSTRING_INDEX(name,'/',3),'.',-1)='com';
于 2012-07-04T16:40:12.240 回答