2

.com TLD を持つドメインを識別するために、MySQL で REGEX を作成しています。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[[./.]]'"

ただし、これは、実際にはさらに多く (1000 以上) を返す必要がある場合に、1 つの行のみを返しています。クエリでどのような間違いを犯していますか?

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 に答える