1. 正则表达式简介

1. 一个标准的正则表达式分为3个部分:分隔符、表达式和修饰符。

1.1   分隔符用来包裹表达式,可以是除了特殊字符意外的任何字符,常用的分隔符是' / '。表达式由一些特殊字符(即元字符)和非特殊字符(即文本字符)组成,比如' [a-z0-9_-]+@[a-z0-9_-]+ '是一个合法的表达式,可以匹配一个简单的电子邮件字符串。修饰符用来开始或者关闭某种功能或模式。



1.2   在正则表达式中,有12个字符被保留作为特殊用途(元字符),如下:
     [   ]    \  ^   $   .   |   ?   *   +  (   )
     如果要在正则表达式中将这些字符用作文本字符,需要用反斜杠 "\"来转义。如, '1+2=3',则应使用如下正则表达式:
    /1\+1=3/

使用连字符 ” - ” 定义一个字符范围作为字符集:

/[0-9]/
/[0-9a-fA-F]/   :  匹配09的一个数字或者a到f的字母又或者A到F的字母。
/[^0-9]/   :   我们还可以在"  [  " 后跟一个 " ^ " ,来对字符集取反。
1.3    字符集:是由一对方括号[]括起来的字符集合。使用字符集,可以告诉正则表达式引擎仅仅匹配方括号里面的多个字符中的一个。
    /[mo]/      仅仅匹配字符串'm'或'o'。
      要注意,字符集中的顺序不会影响匹配的结果。
     ' ^ ' 表示去反,  /[^0-9]/ 匹配一个非数字。

2. 重复与限定
    正则表达式对于重复出现的字符串可以使用限定符?、*、+来匹配。规则如下:
      ? 匹配前导字符0次或1次,即表示前导字符是可选的。
        /love?mo/   表示e 0次或1次
      * 匹配前导字符0次或多次。
        /love*mo/   表示e 0次或多次
      + 匹配前导字符1次或多次
        /love*mo/  表示e 1次或多次
      { }   正则表达式的规则还允许我们使用一对限定符,
        格式如下: {min,max}
        其中,min,max都是非负数,表示重复的次数在min和max之间,即至少重复min次,最多重复max次,如果没有max,表示重复的次数没有上限,即至少重复min次。如果同时没有','和max,表示重复min次。
        /love{1,3}mo/  表示字母e至少重复1次,最多重复3次。
        /love{1,}mo/   表示字母e至少重复1次
        /love{1}mo/     表示字母e重复1次。

3. 贪婪匹配与懒惰匹配
    Lin love<font>Mo</font>God bless them
    /<.+>/
       限定符'?'、'*'、'+'、'}'在匹配时具有贪婪性。原因在于'+'是贪婪的,'+'会导致正则表达式引擎试图尽可能多的重复前导字符。只有当这种重复会引起整个正则表达式匹配失败的情况下,引擎才会进行回溯。也就是说,它会放弃最后一次的"重复",然后处理正则表达式剩余的部分。由于"+"的贪婪性,/<.+>/匹配的是<font>Mo</font>
       为了能够成功匹配<font>,可以使用懒惰匹配来代替原来的贪婪匹配。只要在限定符后面紧接着一个问题"?",告诉正则表达式进行懒惰匹配就可以了。例如,/<.+?>/。

4. 开始与结束
    它们不匹配任何字符,它们匹配的是字符之前或之后的位置。
    " ^ " 是开始匹配符," ^ "匹配一行字符串第一个字符前面的位置,即字符串的开始
    如: /^Lin/
    " $ " 是结束匹配符," $ "匹配字符串最后一个字符后面的位置,即字符串的结束
    如: /Mo$/

5. 模式修正符
      一个标准的正则表达式由分隔符,表达式,修饰符3个组成。其中修饰符的作用是设置模式,即告诉正则引擎如何解释表达式。PHP中常用的模式修饰符如下:
      i 忽略大小写
     m  多文本模式,行起始符"^"和行结束符"$"除了匹配整个字符串的开头和结束外,还匹配其中的换行符
     s  单文本模式,换行符当普通字符对待,符号" . "可以匹配包括换行符在内的任何符号
     x  忽略空白字符
    具体使用:
        修饰符可以放在表达式的外面,如:
          /Lin love Mo/I
        也可以放在表达式里面,如:
         (? 模式修饰符)      这个表示开启对应模式
         (?-模式修饰符)      这个表示关闭对应模式

/(?i)Lin love (?-i)Mo/ 表示忽略’ Lin love’的大小写,而对’Mo’大小写敏感。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值