zoukankan      html  css  js  c++  java
  • 正则表达式基础(1)

    目录

    一、基础字符匹配

    二、常用元字符及功能

    三、重复匹配

      1.限定精确次数或限制区间

      2.防止过度匹配

    四、常见问题的正则表达式解决方法

    一、基础字符匹配

      1.空白元字符                 

    元字符 说明
    [  ] Backspace键
    f 换页符
    回车符
    换行符
    Tab键
    v 垂直制表符

    表示两个字符时,是匹配单词边界,之前遇到过要匹配单词,需要 r'加以说明.

    回车和换行符感觉功能是一样的,查看一些资料表示有一些解释器会将  自动转换为 , 正则表达式 匹配一个“回车换行”组合,windows系统把这个组合用作文本结束标签,Unix和Linux只使用一个换行符结束一个文本行,匹配时候用 即可,不应加上 .

       2.特定字符匹配

    元字符 说明
    d 任何一个数字字符(等价于[0-9])
    D 任何一个非数字字符(等价于[^0-9])
    w 任何一个字母字符或下划线字符(即[a-zA-Z0-9_])
    W 任何一个非字母字符或非下划线字符(即[^a-zA-Z0-9_])
    s 任何一个空白字符
    S 任何一个非空白字符

    字母的大小写匹配相反的字符.

      3.匹配十六进制和八进制数值

    在正则表达式中,十六进制数值要用前缀x,如x0A对应ASCII字符10(换行符),效果等于 ,八进制前缀则是,如11对应ASCII 9(制表符)

    二、常用元字符及功能

      1. 字符常用于转义,如上面列举的字符匹配,当文本需要匹配本身时,用\

      2. .字符可以匹配任何单个字符、字母、数字,甚至本身

      3. +字符匹配一个或多个字符,放在一个字符或字符集之后,匹配与前面意义相同的字符

      4. *字符匹配0个或多个字符,用法类似'+',只是匹配的前面字符可以不出现

      5. ?字符匹配他前面的字符是否存在,如匹配URL时,有http和https,正则表达式https?

      6. @、-字符用时无须转义

    三、重复匹配

      1.限定精确次数或限制区间

      有了上面的字符功能的介绍,重复匹配我们可以用+或*,但是有局限性,不能限制重复次数,所以要给它设定精确的次数,这时用到{},比如要找出网页中RGB值,文本是:

    <body bgcolor = "#336655" text = "#FFFFFF">
    View Code、

    正则表达式:#[0-9a-fA-F]{6}  结果:#336655  #FFFFFF

    例子重复匹配为6次,那如果要检查日期的书写格式如:2005/01/01、2006-1-10、19.08.15、18 8 8,最后一个不符合要求,年份至少要两位数,这就需要设定最少和最多重复次数,

    正则表达式为:d{2,4}[/-.]d{1,2}[/-.]d{1,2}   结果最后一个不符合就没有匹配到,检查完成。

      2.防止过度匹配

      虽然我们已经能够限定匹配重复次数,但是还有一种情况,一个网页里面的各种标签不止出现一次,例如要找出<a></a>里面的内容:文本:

    <a>网页</a><a>新闻</a><a>贴吧</a><a>知道</a><a>音乐</a><a>图片</a><a>视频</a><a>地图</a><a>文库</a>
    View Code

    正则表达式:<a>.*</a>  匹配结果是整一串,<a>网页</a><a>新闻</a><a>贴吧</a><a>知道</a><a>音乐</a><a>图片</a><a>视频</a><a>地图</a><a>文库</a>,而我们理想是每个标签都会分开

    修改为:<a>.*?</a>   结果显示9个匹配:<a>网页</a>、<a>新闻</a>、<a>贴吧</a>、<a>知道</a>、<a>音乐</a>、<a>图片</a>、<a>视频</a>、<a>地图</a>、<a>文库</a>

      +、*都是“贪婪型”元字符,在匹配行为模式上是多多益善而不是适可而止,所以它的“懒惰性”版本则尽可能短的匹配,式子后加上?

    四、常见问题的正则表达式解决方法

      1.URL地址

    <a href="https://www.baidu.com/" nslog="normal" nslog-type="10600112" data-href="https://www.baidu.com/s?ie=utf-8&fr=bks0000&wd=">网页</a>
    <a href="http://news.baidu.com/" nslog="normal" nslog-type="10600112" data-href="http://news.baidu.com/ns?tn=news&cl=2&rn=20&ct=1&fr=bks0000&ie=utf-8&word=">新闻</a>
    <a href="https://tieba.baidu.com/" nslog="normal" nslog-type="10600112" data-href="https://tieba.baidu.com/f?ie=utf-8&fr=bks0000&kw=">贴吧</a>
    <a href="https://zhidao.baidu.com/" nslog="normal" nslog-type="10600112" data-href="https://zhidao.baidu.com/search?pn=0&&rn=10&lm=0&fr=bks0000&word=">知道</a>
    <a href="http://music.baidu.com/" nslog="normal" nslog-type="10600112" data-href="http://music.baidu.com/search?f=ms&ct=134217728&ie=utf-8&rn=&lm=-1&pn=30&fr=bks0000&key=">音乐</a>
    <a href="http://image.baidu.com/" nslog="normal" nslog-type="10600112" data-href="http://image.baidu.com/search/index?tn=baiduimage&ct=201326592&lm=-1&cl=2&nc=1&ie=utf-8&word=">图片</a>
    <a href="http://v.baidu.com/" nslog="normal" nslog-type="10600112" data-href="https://www.baidu.com/sf/vsearch?pd=video&tn=vsearch&ie=utf-8&rsv_spt=17&wd=">视频</a>
    <a href="http://map.baidu.com/" nslog="normal" nslog-type="10600112" data-href="http://map.baidu.com/m?ie=utf-8&fr=bks0000&word=">地图</a>
    <a href="https://wenku.baidu.com/" nslog="normal" nslog-type="10600112" data-href="https://wenku.baidu.com/search?lm=0&od=0&ie=utf-8&fr=bks0000&word=">文库</a>
    View Code

    正则表达式:https?://[w.]+.com

      2.电子邮件地址

    My QQ mail is 12345@qq.com, and another mail is abcde@126.com
    View Code

    正则表达式:(w+)*@w+.com

       在实际运用正则表达式中,很多需要根据文本特点写出最合适简单的式子,比如爬取网页的目标信息,一个好的正则表达式能帮我们简单地解决问题。

  • 相关阅读:
    解析Zigbee技术在智能家居应用中的优缺点
    ZigBee无线网络技术在小区路灯照明系统的应用
    Zigbee技术特点
    梯度下降法-理解共轭梯度法
    感知机--理解系数向量和样本点递归
    fisher线性判别
    iso data 聚类算法
    近邻算法--类与类间最小损失函数
    聚类算法--理解最大最小距离分类
    类间距离测度方法
  • 原文地址:https://www.cnblogs.com/chenzhenhong/p/11356940.html
Copyright © 2011-2022 走看看