有一天,老板对小明说,去咱们网站xxx行业找100个公司,打电话调研下他们对网站的反馈评价,分析下用户需求。
小明找到技术希望帮忙导出用户电话数据。可技术大哥正在赶一个重要项目,对小明的要求很不耐烦:“分类列表不都是用户电话吗?100个又不多,自己弄!”
小明打开了某个列表,一个个复制粘贴电话到Excel表格,花了20分钟时间做这种机械工作。
可如果小明懂正则表达式的话,这个工作只需要1分钟。
浏览器右键查看网页源代码,把代码粘贴到支持正则表达式的编辑器中(Editplus、Sublime等,是个编程工具都支持)
打开查找功能,输入正则表达式 1d{10},如上图所示,然后点击查找全部按钮,一下所有电话号码就被选中了,复制粘贴电话到另一个新建文件中,搞定。
什么是正则表达式?
在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。
很可能你使用过Windows下用于文件查找的通配符,也就是*和?,如果你想查找某个目录下的所有的Word文档的话,你会搜索*.doc。在这里,*会被解释成任意的字符串。
正则表达式提供很多符号来匹配不同的字符串,比如比如s匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等。w匹配字母或数字或下划线或汉字,^匹配字符串的开始,$匹配字符串的结束。
有了这些符号搭配,就可以写出复杂的字符串匹配规则,迅速找到需要的内容。
那刚才输入的1d{10}是个什么鬼东西?
大家都知道我国手机号都是11位,而且开头一定是1对吧,d在正则表达式里表示匹配数字(从0到9),而{10}代表的意思是一共10个数字,这样1d{10}匹配出来的就是手机号码了。
互联网产品中哪里会用到正则表达式呢?
前端数据校验
最简单的就是登录注册的校验部分。
用户输入的用户名符合规范吗?用户输入的是邮箱地址吗?
以邮箱为例子,正则表达式如下:
w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
通过这个正则表达式就可以判断用户输入的是否是邮件地址。
还有很多很多的前端校验工作都用正则表达式实现,比如判断用户的QQ号输入(至少像QQ号):
[1-9]d{4,}
从这个表达式看,QQ号开头是1-9数字中的一个(没见过0开头的QQ号吧),后面的d{4,}表达意思的是最少加上4个数字,这样的结构才像一个QQ号。(QQ号最短5位)
还有更多的例子,常用正则表达式如下:
采集爬取
大数据这些年非常火,但如果你没有有足够多的数据怎么办?
采集爬取技术差不多是一个程序员的必备技能,而采集爬取什么内容,差不多都会用到正则表达式。
用来匹配页面里需要的数据和字段,格式化以后放到自己的数据库中。
比如墨迹天气的数据就是采集了不同的数据源,并通过机器学习的方法进行智能校准。
新网站没内容怎么办?采集内容。
网站流量上不去怎么办?采集内容伪原创。
采集爬取其实有很多有趣的玩法,参见:能利用爬虫技术做到哪些很酷很有趣很有用的事情?
而采集爬取网页基本离不开正则表达式。
听起来很牛逼,那怎么学呢?
推荐先读这篇:30分钟学会正则表达式
实践是最好的老师,为了提升学习效率,建议下载安装专业的正则表达式测试器。
Mac可以下载安装yRegex。
然后把常用的正则表达式都测试验证一遍,然后试着自己去写,然后对比差异。
其他学习资源
正则表达式学习书籍推荐两本《精通正则表达式》、《正则表达式必知必会》
国外的优秀在线正则表达式测试器:
http://www.regexr.com/
https://regexper.com/
关于正则表达式的专题网站:
http://Regular-Expressions.info