consulta MySQL para selecionar domínios válidos de uma tabela

1

Domínios de tabela simples: int id, nome varchar

A tabela

deve conter domínios válidos (consideraremos que o domínio é válido se estiver no formulário .*\.[\w\d_-]{2,3}

Não precisamos validar o DNS, é claro. Executando esse SQL:

SELECT * FROM domain WHERE name NOT REGEXP '.*\.[\w\d_-]{2,3}'

me retorna algum resultado imprevisível (domínios que para mim absolutamente satisfazem a condição)

exemplo:

95323   vandtech.dk
95324   vanee.demon.co.uk
95325   vanens.com
95326   vanger.nl
95327   vangstein.no
95328   vanhoorn-kiel.de
95329   vanityeventi.com
95330   vanloosen.de

mas não retorna entradas inválidas como:

1.396.041   _.
1.396.042   _.75
1.396.043   _.ca
1.396.044   _23.com

Alguém poderia me explicar o que estou fazendo de errado com o regexp?

    
por archer 27.02.2010 / 06:13

1 resposta

2

Parece que você está usando um regex no estilo Perl, mas o MySQL não os entende. Você pode substituir, por exemplo, \d por [:digit:] . Confira o §11.4.2 do Manual de Referência do MySQL 5.1 .

Eu não tenho 100% de certeza, mas acho que o seu regex seria:

.*\.[[:alnum:][:digit:]_-]{2,3}

para ser honesto, acho que há alguma sobreposição entre as várias classes. Talvez pudesse ser representado de forma mais simples:

.*\.[[:alnum:]_-]{2,3}

Devo salientar também que o sublinhado _ não é válido em nenhuma parte de um nome de domínio.

    
por 27.02.2010 / 06:49

Tags