抓取网页时,常用到的正则语法。(持续更新,本次2015-11-11)

来源:互联网 发布:数据挖掘系统的任务 编辑:程序博客网 时间:2024/05/20 07:51

首先,祝大家光棍节快乐!


没想到我会持续的更新正则的用法,在文章的末尾,会普及一个正则表达式工具。


一.先说几句。

    文章的抓取算是比较常见的,经常会有需求去抓别人的网站,来提取新闻,或者其他等信息。

    这两天我做一个项目就是这样,可能会抓取很多网站,但是不论什么网站,正则合适就可以了,不是吗?


二.常用句子的解释以及科普

   1.抓标签碰到格式不一的句子怎么办?

      例子:

<a class="link row" target="_blank"  .....  href="/post/quanqiushichanggailanguzhizhishulingzhangposiliaozhishulingdie"   .... > ....</a>

      要求:抓住href(/post/quanqiushichanggailanguzhizhishulingzhangposiliaozhishulingdie)

      正则:

<a[\S\s]*?href="(?<url>[\S\s]*?)"[\S\s]*?>[\S\s]*?</a>

  

      

 运行的结果不用质疑,已经是抓到了。  但是这个句子中有两个奇怪的语法:

  •   [\S\s]*?
  •  (?<url>[\S\s]*?)
 第一句,可以这么理解,  忽略中间任何字符,直道后面能够匹配为止。
 第二句,就是一个正则的group,格式是:(?<名字>语句)

第二句就不用说了,直接说第一句吧  [\S\s]*?

\S

匹配任意一个不是空白符的字符

\s

匹配任意空白符的字符

*

重复0次或多次



    当他们连用起来就是可以匹配任意1个字符

    当开启贪婪模式,也就是*,的时候,代表可以无限匹配。
    
    那么,匹配总要有个结点吧?所以用?来结束
    
    *?的意思就是匹配最短,用最少的匹配。  比如 :a.*?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab(第一到第三个字符)和ab(第四到第五个字符)

    所以这个句子的情景是: 
    A:<a asdfsd></a>   
    B:<a></a>
    
    

   两者都可匹配到,如果想单单匹配第一句的话,那么使用语句:<a[\S\s]+?></a>

+

重复一次或多次

   
区别就在+这里,*是可重复0次,?是必须重复1次

证据:

OK,第一点先到这里,以后会持续更新的。

三.再说几句

     上面我第一个工具是:正则测试工具
       
       其他工具是:正则表达式,终极使用!3个工具,搞定一切

0 0
原创粉丝点击