zoukankan      html  css  js  c++  java
  • 正则表达式

    正则表达式:正则表达式是一种对字符串操作的逻辑表达式,用来对字符串进行筛选和匹配

    构成:正则表达式由元字符和普通字符构成,普通字符包含字母,数字,特殊符号,遇到普通字符直接写就可以匹配了,遇到转义字符需要\去转义

            重点在元字符,元字符才是正则表达式的灵魂

    优缺点:

      优点:灵活,功能性强,逻辑性强

      缺点:难理解,不易上手

    我们一般可以用这个网站进行正则表达式的测试:http://tool.chinaz.com/regex/

    下面来介绍正则表达式的灵魂----元字符

    我只给出一些常用的元字符:
      1.字符组

      用[]括起来的字符串叫做字符组,[]内的字符会被匹配到

      eg:正则表达式是[abc],那么字符串中的a,b,c都会被匹配到

      

      如果字符组里的内容过多,还可以用-表示范围的意思,eg:[a-z]就是匹配a到z之间的所有小写字母(包括a,z)    [A-Za-z]匹配的是A-Z与a-z之间的所有字母(包括两端)

      ps:为什么是A-Z写前面呢? 字符组里的内容的顺序是按照ascii码的顺序,在ascii码表里A-Z排在a-z的前边,所以他就排前边喽,顺序千万不能反,否则匹配不出来

      2.简单元字符(常用)

        . 匹配除换行符以外的任意字符

        w 匹配字母或数字或下划线

        s 匹配任意空白符

        d 匹配数字

         匹配一个换行符

         匹配一个制表符

         匹配一个单词的结尾,前边要写结尾的字母

        ^ 匹配字符串的开头,后边要写开头的字符串

        $ 匹配字符串的结尾,前边要写结尾的字符串

        W 匹配非字母或数字或下划线

        D 匹配非数字

        S 匹配非空白符

        a|b 匹配字符串a或字符串b

        () 匹配括号内的表达式,   ps:()的优先级高,匹配时先看()中的内容

        [] 字符组(上边已经说过了)

        [^] 匹配除了字符串中的字符的所有其他字符

      3.量词

        使用量词可以一次性的匹配到很多个字符

        * 重复0次或更多次

        + 重复一次或更多次

        ? 重复零次或一次

        {n} 重复n次

        {n,} 重复n次或更多次

        {n,m} 重复n-m次

      4.惰性匹配和贪婪匹配

        惰性和贪婪顾名思义,一个表示尽可能的少,一个表示尽可能的多

        量词中的 * + {}  都属于贪婪匹配,就是在满足匹配时,尽可能长的匹配字符串

        ?则属于惰性匹配,就是在满足匹配时,尽可能少的匹配字符串

    理论的东西差不多说完了,我们实践一下

    我们看下这个,正则表达式是小明.*,首先只要是小明就能匹配到,然后.,就是除了换行符都能匹配到,然后*就是贪婪匹配,尽可能的多的匹配

    如果加一个?呢,应该匹配小明吧,因为?属于惰性匹配,匹配的小明之后,尽可能少的匹配,也就是不匹配字符了,我们来验证一下

     

    与我们的猜想符合,继续往下看

    简单分析一下,首先以<开头才能进行匹配,然后.*表示只要是换行符我都能匹配到,然后还得是>结尾,字符串满足这些规则,很自然就匹配上了

    下边着重说一下贪婪匹配和惰性匹配

      

    第一张图片是惰性匹配,第二章图片是贪婪匹配,我们可以很清楚的看到差别,

    在第一张图中,惰性这个词体现的淋漓尽致,因为有.所以他要匹配除了换行符之外的字符,然后又一a为结尾,所以我尽可能的少匹配,只要匹配a前边一个字符就好了,一匹配a就返回匹配结果

    在第二种图中,贪婪这个词也体现的淋漓尽致,首先还是先匹配除换行符以外的其他字符,然后以a为结尾,但是碰到第一个a我不管,继续往下匹配,知道碰到最后一个a,我才返回匹配结果,尽可能的是匹配到的字符串长

    下边我给出几个常用的正则表达式(摘自http://tool.chinaz.com/regex/),我们可以自己解读一下,当然如果有能力的话,自己写正则也不错

    E-mail地址:w[-w.+]*@([A-Za-z0-9][-A-Za-z0-9]+.)+[A-Za-z]{2,14}

    身份证号:d{17}[d|x]|d{15}

    手机号(国内):0?(13|14|15|17|18|19)[0-9]{9}

    邮政编码:d{6}

    IP地址:(25[0-5]|2[0-4]d|[0-1]d{2}|[1-9]?d).(25[0-5]|2[0-4]d|[0-1]d{2}|[1-9]?d).(25[0-5]|2[0-4]d|[0-1]d{2}|[1-9]?d).(25[0-5]|2[0-4]d|[0-1]d{2}|[1-9]?d)

    格式日期:d{4}(-|/|.)d{1,2}1d{1,2}

    还有很多,我就不写了,可以自行浏览

     

  • 相关阅读:
    钉钉outgoing机器人小项目开发
    js根据cookie判断,一天之内只弹出一次弹窗
    js倒计时功能
    jquery的$().each,$.each的区别
    VS代码提示自动高亮
    winform当前屏幕大小
    动态增删改控件
    datagridveiw样式
    sql 语句 提取中文的首字母
    按键监听及重写
  • 原文地址:https://www.cnblogs.com/yhrfighting123/p/10658020.html
Copyright © 2011-2022 走看看