POSIX正则表达式
POSIX正则表达式的结构与典型的算术表达式的结构没有什么不同:各种元素(运算符)被组合以形成更复杂的表达式。 最简单的正则表达式是在"g","haggle"或"bag"等字符串内匹配单个字符(如g)的表达式。让我们解释一下POSIX正则表达式中使用的几个概念。之后我们将为您介绍正则表达式相关的函数。
中括号([])
([])在正则表达式的上下文中使用时具有特殊含义。它们用于查找一系列字符。
表达式 |
描述 |
[0-9] |
它匹配从0到9的任何十进制数字。 |
[a-z] |
它匹配从小写字母a到小写字母z的任何字符。 |
[A-Z] |
它匹配从大写A到大写Z的任何字符。 |
[a-Z] |
它匹配从小写字母a到大写字母Z的任何字符。 |
上面显示的范围是一般的; 您还可以使用范围[0-3]来匹配范围从0到3的任何十进制数字,或者使用范围[b-v]来匹配范围从b到v的任何小写字符。
量词
括号中的字符序列和单个字符的频率或位置可以用特殊字符表示。每个特殊字符都有特定的含义。+,*,?都匹配一个字符序列。
表达式 |
描述 |
p+ |
它匹配包含至少一个p的任何字符串。 |
p* |
它匹配包含零个或多个p的任何字符串。 |
p? |
它匹配任何包含零或一个p的字符串。 |
p{N} |
它匹配包含N个p序列的任何字符串 |
p{2,3} |
它匹配任何包含两个或三个p的序列的字符串。 |
p{2, } |
它匹配包含至少两个p的序列的任何字符串。 |
p$ |
它匹配任何字符串,其末尾为p。 |
^p |
它匹配任何字符串,在它的开头有p。 |
例子
以下示例将加深理解您关于匹配字符的概念。
表达式 |
描述 |
[^a-zA-Z] |
它匹配任何不包含从a到z和A到Z的任何字符的字符串。 |
p.p |
它匹配任何包含p的字符串,后跟任何字符,然后是另一个p。 |
^.{2}$ |
它匹配任何包含两个字符的字符串。 |
<b>(.*)</b> |
它匹配<b>和</b>中包含的任何字符串。 |
p(hp)* |
它匹配任何包含p的字符串,后跟零个或多个hp序列的实例。 |
预定义的字符范围
为方便编程,可以使用几个预定义的字符范围,也称为字符类。字符类指定整个字符范围,例如字母表或整数集
表达式 |
描述 |
[[:alpha:]] |
它匹配包含字母字符aA到zZ的任何字符串。 |
[[:digit:]] |
它匹配包含数字0到9的任何字符串。 |
[[:alnum:]] |
它匹配包含字母数字字符aA到zZ和0到9的任何字符串。 |
[[:space:]] |
它匹配包含空格的任何字符串。 |
PHP的POSIX正则表达式函数
PHP目前提供七种使用POSIX样式正则表达式搜索字符串的函数
函数 |
描述 |
ereg() |
ereg()函数在指定的字符串中搜索正则模式指定的字符串,如果找到模式则返回true,否则返回false。 |
ereg_replace() |
ereg_replace()函数搜索由正则指定的字符串,如果找到则用替换替换模式。 |
eregi() |
eregi()函数在指定的字符串中搜索正则模式指定的字符串,如果找到模式则返回true,否则返回false。 搜索不区分大小写。 |
eregi_replace() |
eregi_replace()函数搜索由正则指定的字符串,如果找到则用替换替换模式。 搜索不区分大小写。 |
split() |
split()函数将字符串分成各种元素,每个元素的边界基于字符串中模式的出现。 |
spliti() |
spliti()函数的运行方式与兄弟split()完全相同,只是它不区分大小写。 |
sql_regcase() |
spliti()产生用于不区分大小的匹配的正则表达式(这个函数已经从PHP5.3开始废弃,不建议使用) |