撸linux


mysql查询包含一级网址字段的最佳匹配正则表达式

select id,coname,description from test where website='' and description regexp '.*([a-z0-9\-]+\.){0}[a-z0-9\-]([a-z0-9\-]*[\.])+(aero|arpa|biz|com|coop|edu|gov|info|int|jobs|mil|museum|name|nato|net|org|pro|xyz|travellink|site|top|ren|red|wang|club|[a-z]{2}).*' order by id;

用mysql的regexp函数查询的时候一定要在正则表达式前后加上 .* (一个点号,一个星号,前后都要加上)。

经过探索,匹配一级网址的最佳正则表达式是

([a-z0-9\-]+\.){0}[a-z0-9\-]([a-z0-9\-]*[\.])+(aero|arpa|biz|com|coop|edu|gov|info|int|jobs|mil|museum|name|nato|net|org|pro|xyz|travellink|site|top|ren|red|wang|club|[a-z]{2})

以上表达式可以匹配的域名包含类似的以下这些:

www.abc-abc.com.cn

www.abc.com

www.abc.cn

abc.cn

abc.com.cn

abc.com

123.com

123.com.cn

www.123.com

www.123.com.cn

abc-123.abc-123.abc-123.cn

abc-123.abc-123.com.cn

推荐参考正则表达式中的不匹配 | isnowfy

 

[abc] a或b或c . 任意单个字符 a? 零个或一个a
[^abc] 任意不是abc的字符 \s 空格 a* 零个或多个a
[a-z] a-z的任意字符 \S 非空格 a+ 一个或多个a
[a-zA-Z] a-z或A-Z \d 任意数字 a{n} 正好出现n次a
^ 一行开头 \D 任意非数字 a{n,} 至少出现n次a
$ 一行末尾 \w 任意字母数字或下划线 a{n,m} 出现n-m次a
(...) 括号用于分组 \W 任意非字母数字或下划线 a*? 零个或多个a(非贪婪)
(a|b) a或b \b 单词边界 (a)...\1 引用分组
(?=a) 前面有a (?!a) 前面没有a \B 非单词边界

相关博文



发表评论

电子邮件地址不会被公开。