PHP 正则表达式

  • PHP 正则表达式

    正则表达式只不过是字符本身的序列或模式。它们为模式匹配功能奠定了基础。使用正则表达式,您可以在另一个字符串中搜索特定字符串,您可以用另一个字符串替换一个字符串,并且可以将字符串拆分为多个块。PHP提供特定于两组正则表达式函数的函数,每个函数对应于某种类型的正则表达式。您可以根据自己的舒适度使用其中任何一种。
    • POSIX正则表达式
    • PERL风格正则表达式
  • 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开始废弃,不建议使用
  • PERL风格正则表达式

    Perl风格的正则表达式与POSIX对应类似。POSIX语法几乎可以与Perl样式的正则表达式函数互换使用。实际上,您可以使用前一个POSIX部分中介绍的任何量词。让我们解释一下PERL正则表达式中使用的几个概念。之后我们将向您介绍与正则表达式相关的函数。

    元字符

    元字符只是一个字母字符,前面是反斜杠,用于赋予组合特殊含义。例如,您可以使用'\d'元字符搜索大笔金额:/([\d]+)000 /,这里\d将搜索任何数字字符串。以下是可在PERL样式正则表达式中使用的元字符列表。
    元字符 描述
    . 单个字符
    \s 空格字符(空格,制表符,换行符)
    \S 非空白字符
    \d 一个数字(0-9)
    \D 一个非数字
    \w 一个单词字符(a-z,A-Z,0-9,_)
    \W 一个非单词字符
    [aeiou] 匹配给定集合中的单个字符
    [^aeiou] 匹配给定集合之外的单个字符
    (foo|bar|baz) 匹配指定的其中之一

    修饰符

    有几个修饰符可以使你的正则表达式工作更容易,如区分大小写,多行搜索等。
    修饰符 描述
    i 使匹配大小写不敏感
    m 指定如果字符串具有换行符或回车符,则返回字符,^和$运算符现在将匹配换行符边界,而不是字符串边界
    o 仅对表达式求值一次
    s 允许使用.匹配换行符
    x 允许您在表达式中使用空格以便清晰
    g 全局查找所有匹配
    cg 即使在全局匹配失败后也允许搜索继续

    PHP的PERL正则表达式兼容函数

    PHP提供以下函数,用于使用与Perl兼容的正则表达式搜索字符串
    函数 描述
    preg_filter() 执行一个正则表达式搜索和替换
    preg_grep() 返回匹配模式的数组条目
    preg_last_error() 返回最后一个PCRE正则执行产生的错误代码
    preg_match() 执行匹配正则表达式
    preg_match_all() 执行一个全局正则表达式匹配
    preg_replace_callback_array() 执行正则表达式搜索并使用回调函数替换
    preg_replace_callback() 执行一个正则表达式搜索并且使用一个回调函数进行替换
    preg_replace() 执行一个正则表达式的搜索和替换
    preg_split() 通过一个正则表达式分隔字符串
    preg_quote() 转义正则表达式字符