美文网首页
416乔向阳+正则表达式,易学实用的技术(投稿)+#第4组第7周

416乔向阳+正则表达式,易学实用的技术(投稿)+#第4组第7周

作者: 花昇 | 来源:发表于2017-08-02 14:52 被阅读0次

    有一天,老板对小明说,去咱们网站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分钟学会正则表达式

    实践是最好的老师,为了提升学习效率,建议下载安装专业的正则表达式测试器。

    Windows平台下好用的正则表达式测试器

    Mac可以下载安装yRegex。

    然后把常用的正则表达式都测试验证一遍,然后试着自己去写,然后对比差异。

    其他学习资源

    正则表达式学习书籍推荐两本《精通正则表达式》、《正则表达式必知必会》

    国外的优秀在线正则表达式测试器:

    http://www.regexr.com/

    https://regexper.com/

    关于正则表达式的专题网站:

    http://Regular-Expressions.info

    相关文章

      网友评论

          本文标题:416乔向阳+正则表达式,易学实用的技术(投稿)+#第4组第7周

          本文链接:https://www.haomeiwen.com/subject/xwaelxtx.html