MySQL 查询从表中选择有效域

MySQL 查询从表中选择有效域

简单表域:int id,varchar name

表必须包含有效的域(如果域符合以下条件,我们将认为该域有效: .*\.[\w\d_-]{2,3}

当然,我们不需要验证 DNS。运行该 SQL:

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

返回一些不可预测的结果(对我来说绝对符合条件的域)

例子:

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

但不会返回无效条目,例如:

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

有人可以向我解释一下我在使用正则表达式时做错了什么吗?

答案1

看起来你正在使用 Perl 风格的正则表达式,但 MySQL 无法理解这些。例如,你可以将其替换\d[:digit:]。请查看MySQL 5.1 参考手册第 11.4.2 节

我并不是 100%确定,但我认为你的正则表达式看起来像:

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

不过说实话,我认为各个类别之间还是有重叠的。也许可以更简单地表示一下:

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

我还应该指出,下划线_在域名的任何部分都是无效的。

相关内容