码迷,mamicode.com
首页 > 其他好文 > 详细

正则表达式基础

时间:2018-08-18 17:53:26      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:文本   特定   组成   9.png   域名   前缀   inf   邮箱   abc   

一个正则表达式通常被称为一个模式(pattern),为用来描述或者匹配一系列符合某个句法规则的字符串。我们常用正则表达式来处理两种情况,一种是查找特定的信息(搜索),另外一种是查找并编辑特定的信息(替换)。

一、匹配单个字符和一组字符

  1. 匹配单个字符

  (1). 元字符(英文句号)可以匹配任何一个单个的字符(单个的字符、数字、字母、.本身),相当于DOS的?字符和SQL的_字符。

  (2)如果要匹配特殊字符(元字符)就要使用 \ 来对元字符进行转义,例如:\. 就匹配了 . 本身。

  2. 匹配一组字符

  (1)元字符[ 和 ] 用来定义一个字符集合,其含义是必须匹配该集合中的字符之一。定义一个字符集合的具体做法有两种:一种是把所有的字符都列出;二是利用元字符-以字符区间的方式给出。

    其中,第一种例如:

    文本:

    na.xls

    sa.xls

    模式:[ns]a.xls

    匹配结果:

    na.xls

    sa.xls  

    第二种例如:

    文本:

    na2.xls

    sa1.xls  

    sa.xls

    模式:[ns]a[0-9].xls

    匹配结果:

    na2.xls

    sa1.xls  

  (2)字符集合还可以用元字符^求非,用^来表明你想对一个字符集进行取非匹配,即除了该集合中的字符,其它字符都可以匹配。

    文本:

    na2.xls

    sa1.xls  

    sa.xls

    模式:[ns]a[^0-9].xls

    匹配结果:

    sa.xls

    注意:^的效果作用于给定字符集合的所有字符或字符区间,而不是仅限于紧跟在^字符后面的哪那一个字符或字符区间,且要置于集合[]中的开头位置。

二、元字符讲解

  前面我们也已经接触到了元字符:. \ [ ] - ^  。 正则表达式涉及的元字符见博客结尾。

  (1)特殊字符的转义即对元字符的转义,由于正则表达式中对于规定的元字符会进行相应的处理,但是如果想使用元字符本身的符号就要使用转义字符 \ (反斜杆)作为该字符的前缀了。注意:\\ 匹配 \ 字符。

  (2)空白元字符:

    技术分享图片

    \r\n匹配一个“回车加换行”组合,\r\n\r\n进行的搜索将匹配两个连续的行尾标签,正是两条记录之间的空白行。

  (3)数字元字符:

    技术分享图片

  (4)字母数字元字符:

    技术分享图片

  (5)空白字符元字符

    技术分享图片

         注意:[\b]元字符是个特例,不在\s的覆盖范围内。

  (6)POSIX字符类

    该字符类是正则表达式的一种简写形式。

    技术分享图片

    注意:这里使用的模式以[[开头,以]]结束(两对方括号)。这是使用POSIX必须的,外层的[和]字符用来定义一个字符集合,内层的[和]字符是POSIX字符类本身的组成部分。

三、重复匹配

  (1)匹配一个或多个字符:

    元字符+是匹配其前面一个字符的一个或多个字符(不匹配零个字符的情况),比如[0-9]匹配任意单个数字,[0-9]+将匹配一个或多个连续的数字。

    注意:在给一个字符集合加上+后缀的时候,必须把+放在这个字符集合外面,比如说,[0-9]+是正确的,[0-9+]则不是,其表示是匹配0123456789+中的任意一个字符。

  (2)匹配零个或多个字符

    元字符*是匹配其前面一个字符的零个或多个字符。

    例子:

      文本:hello, .ben@forta.com is my email address,ben.forta@forta.c.com

      模式: \w+[\w.]*@[\w.]+\.\w+

      结果: ben@forta.com  ben.forta@forta.c.com 

    分析:

      开头的\w+负责匹配电子邮箱地址的第一个字符(一个字母数字字符,不包括.字符);[\w.]*覅则匹配电子邮箱地址的第一个字符之后,@字符之前的所有字符;[\w.]匹配@之后的电子邮箱的域名,包括可能出现的多层域名;\.\w+匹配地址的后缀名。

    注意:我们没有对字符集合[\w.]中的.字符进行转义,尽管如此还是匹配出. ,一般来说,当在字符集合中使用 . 的时候,像 . 和+这样的元字符将被解释为普通字符,不需要被转义。

  (3)匹配零个或多个字符

    元字符?是匹配其前面一个字符的零个或一个字符。

  (4)匹配的重复次数

    重复次数要用{和}字符来给出,把要重复的字符写在它们前面,重复的次数写在他们之间。

    例如:{3}意味着其前面前面一个字符必须在原始文本连续出现三次才算一个匹配;{2,4}意味着该字符最少重复2次,最多重复4次;{2,}意味着最少重复2次或更多次。

   (5)防止过度匹配

    来看一个例子:

    文本:<B>abc</B> and <B> def</B>

    模式:<[Bb]>.*</[Bb]>

    结果:<B>abc</B> and <B> def</B>

    原本我们想匹配两个<B></B>,可结果却是第一个<B>到最后的</B>。原因是*和+都是“贪婪型”元字符,它们在进行匹配时的行为模式时多多益善的而不是适可而止的,它们会尽量从一段文本的开头一直匹配到这段文本的末尾,而不是从开头匹配到第一个匹配时为止。解决的方法时转换成懒惰型,即在贪婪型元字符后加一个?元字符。

六、位置匹配

  (1)单词边界

    该边界时由限定符\b指定的单词边界,顾名思义,\b用来匹配一个单词的开始或结尾。

    文本:the cat scattered

    模式:\bcat\b

    结果:cat

    原始文本中,单词cat的前后都有要给空格,而这将与模式\bcat\b相匹配(空格是用来分隔单词的字符之一)。

  (2)字符串边界

    定义字符串边界的元字符有两个:一个是用来定义字符串开头的^(放在字符串的开头),另外一个是用来定义字符串结尾的$(放在字符串的结尾)。

七、子表达式

  

 

正则表达式基础

标签:文本   特定   组成   9.png   域名   前缀   inf   邮箱   abc   

原文地址:https://www.cnblogs.com/chenloveslife/p/9497575.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!