正则表达式

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

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

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

优缺点:编码

  优势:灵活,功能性强,逻辑性强3d

  缺点:难理解,不易上手blog

咱们通常能够用这个网站进行正则表达式的测试:http://tool.chinaz.com/regex/图片

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

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

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

  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 匹配数字

    \n 匹配一个换行符

    \t 匹配一个制表符

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

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

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

    \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}\1\d{1,2}

还有不少,我就不写了,能够自行浏览

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息