PHP preg_match PCRE 正则函数



  • 定义和用法

    preg_match - 执行匹配正则表达式
  • 版本支持

    PHP4 PHP5 PHP7
    支持 支持 支持
    5.3.6 如果 offset 大于 subject 的程度,将返回 FALSE。
    5.2.2 子命名分组语法可以接受(?<name>),(?'name')以及 (?P<name>)了。 之前版本仅接受(?P<name>)方式。
  • 语法

    preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0 ]]] )
    
    搜索subject与pattern给定的正则表达式的一个匹配.
  • 参数

    参数 必需的 描述
    pattern 要搜索的模式,字符串形式。
    subject 输入字符串。
    matches 多维数组,作为输出参数输出所有匹配结果, 数组排序通过flags指定。
    flags 可以结合下面标记使用(注意不能同时使用PREG_PATTERN_ORDER和 PREG_SET_ORDER):
    • PREG_PATTERN_ORDER - 结果排序为$matches[0]保存完整模式的所有匹配, $matches[1] 保存第一个子组的所有匹配,以此类推。
    • PREG_SET_ORDER - 结果排序为$matches[0]包含第一次匹配得到的所有匹配(包含子组), $matches[1]是包含第二次匹配到的所有匹配(包含子组)的数组,以此类推。
    • PREG_OFFSET_CAPTURE - 如果这个标记被传递,每个发现的匹配返回时会增加它相对目标字符串的偏移量。 注意这会改变matches中的每一个匹配结果字符串元素,使其 成为一个第0个元素为匹配结果字符串,第1个元素为 匹配结果字符串在subject中的偏移量。
    如果没有给定排序标记,假定设置为PREG_PATTERN_ORDER。
    offset 通常, 查找时从目标字符串的开始位置开始。可选参数offset用于 从目标字符串中指定位置开始搜索(单位是字节)。
    注意:使用 offset 参数不同于传递 substr($subject, $offset) 的 结果到 preg_match() 作为目标字符串,因为 pattern 可以包含断言比如^, $ 或者 (?<=x) 。 示例查看 preg_match()。
  • 返回值

    preg_match()返回 pattern 的匹配次数。 它的值将是0次(不匹配)或1次,因为preg_match()在第一次匹配后 将会停止搜索。preg_match_all()不同于此,它会一直搜索subject 直到到达结尾。 如果发生错误preg_match()返回 FALSE。
  • 示例

    //模式分隔符后的"i"标记这是一个大小写不敏感的搜索
    if (preg_match("/php/i", "PHP is the web scripting language of choice.")) {
        echo "A match was found.";
    } else {
        echo "A match was not found.";
    }
    
  • 相关函数

    preg_quote() - 转义正则表达式字符
    preg_match_all() - 执行一个全局正则表达式匹配
    preg_replace() - 执行一个正则表达式的搜索和替换
    preg_split() - 通过一个正则表达式分隔字符串
    preg_last_error() - 返回最后一个PCRE正则执行产生的错误代码