php正则表达式使用的详细介绍(2)

  构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与操作符将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。

4、限定符:

限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。有*或+或?或{n}或{n,}或{n,m}共6种。
*、+和?限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?就可以实现非贪婪或最小匹配。
   正则表达式的限定符有:
 
字符  描述
*  匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
+  匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
?  匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。
{n}  n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
{n,}  n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
{n,m}  m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。 

 5、定界符:边界

用来描述字符串或单词的边界,^和$分别指字符串的开始与结束,\b描述单词的前或后边界,\B表示非单词边界。不能对定位符使用限定符。
3.2 字符类[ ]

可以使用字符类指定字符列表以匹配正则表达式中的一个位置。使用方括号([ 和 ])定义字符类。例如,下面的正则表达式定义了匹配 bag、beg、big、bog 或 bug 的字符类:
    /b[aeiou]g/
1、字符类中的转义序列:
        通常在正则表达式中具有特殊含义的大多数元字符和元序列在字符类中“不具有”那些特殊含义。例如,在正则表达式中星号用于表示重复,但是出现在字符类中时则不具有此含义。下列字符类匹配星号本身以及列出的任何其它字符:
       /[abc*123]/
       但是,下表中列出的三个字符功能与元字符相同,在字符类中具有特殊含义:

]    :定义字符类的结尾。
   -   :定义字符范围

\    :定义元序列并撤销元字符的特殊含义。
对于要识别为字面字符(无特殊元字符含义)的任何字符,必须在该字符前面加反斜杠转义字符。 例如,下面的正则表达式包含匹配四个符号($、\、] 或 -)中任意一个符号的字符类。
/[$\\\]\-]/

2、字符类中字符的范围:
       使用连字符指定字符的范围,例如 A-Z、a-z 或 0-9。这些字符必须在字符类中构成有效的范围。例如,下面的字符类匹配 a-z 范围内的任何一个字符或任何数字:
/[a-z0-9]/
      您还可以使用 \xnn ASCII 字符代码通过 ASCII 值指定范围。例如,下面的字符类匹配扩展 ASCII 字符集中的任意字符 (如 é 和 ê):
/[\x80-\x9A]/

3、反转的字符类:
       如果在字符类的开头使用尖号 (^) 字符,则将反转该集合的意义,即未列出的任何字符都认为匹配。下面的字符类匹配除小写字母 (a-z) 或数字以外的任何字符:
       /[^a-z0-9]/
     必须在字符类的“开头”键入尖号 (^) 字符以表示反转。否则,您只是将尖号字符添加到字符类的字符中。例如,下面的字符类匹配许多符号字符中的任意一个,其中包括尖号:
      /[!.,#+*%$&^]/
3.3 分组和选择

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/ea1e722af39d9e7f8ee54e9f42c26247.html