简单的表域:int id,varchar name
表格必须包含有效的域名(我们会认为域名是有效的,如果它是在窗体中.*\.[\w\d_-]{2,3}
当然,我们不需要对DNS进行validation。 运行该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
有人可以解释我在做什么错误的正则expression式?
看起来你正在使用Perl风格的正则expression式,但MySQL不理解这些。 您可以用[:digit:]replace\d 。 查看MySQL 5.1参考手册的§11.4.2 。
我不是100%确定,但我认为你的正则expression式看起来像:
.*\.[[:alnum:][:digit:]_-]{2,3}
尽pipe说实话,我认为各个阶层之间有一些重叠。 也许它可以更简单地表示:
.*\.[[:alnum:]_-]{2,3}
我也应该指出,下划线_在域名的任何部分都是无效的。