PHP preg_match_all PCRE 正则函数
-
定义和用法
preg_match_all - 执行一个全局正则表达式匹配 -
版本支持
PHP4 PHP5 PHP7 支持 支持 支持 5.4.0 参数matches成为可选的。
5.3.6 如果 offset 大于 subject 的程度,将返回 FALSE。
5.2.2 子命名分组语法可以接受(?<name>),(?'name')以及 (?P<name>)了。 之前版本仅接受(?P<name>)方式。
-
语法
preg_match_all ( string $pattern , string $subject [, array &$matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0 ]]] )
搜索subject中所有匹配pattern给定正则表达式 的匹配结果并且将它们以flag指定顺序输出到matches中. 在第一个匹配找到后, 子序列继续从最后一次匹配位置搜索. -
参数
参数 必需的 描述 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中的偏移量。
offset 否 通常, 查找时从目标字符串的开始位置开始。可选参数offset用于 从目标字符串中指定位置开始搜索(单位是字节)。 注意:使用 offset 参数不同于传递 substr($subject, $offset) 的 结果到 preg_match_all() 作为目标字符串,因为 pattern 可以包含断言比如^, $ 或者 (?<=x) 。 示例查看 preg_match()。
-
返回值
返回完整匹配次数(可能是0),或者如果发生错误返回FALSE。 -
示例
尝试一下//\\2是一个后向引用的示例. 这会告诉pcre它必须匹配正则表达式中第二个圆括号(这里是([\w]+)) //匹配到的结果. 这里使用两个反斜线是因为这里使用了双引号. $html = "<b>bold text</b><a href=howdy.html>click me</a>"; preg_match_all("/(<([\w]+)[^>]*>)(.*?)(<\/\\2>)/", $html, $matches, PREG_SET_ORDER); foreach ($matches as $val) { echo "matched: " . $val[0] . "\n"; echo "part 1: " . $val[1] . "\n"; echo "part 2: " . $val[2] . "\n"; echo "part 3: " . $val[3] . "\n"; echo "part 4: " . $val[4] . "\n\n"; }
-
相关函数
preg_quote() - 转义正则表达式字符preg_match() - 执行匹配正则表达式preg_replace() - 执行一个正则表达式的搜索和替换preg_split() - 通过一个正则表达式分隔字符串preg_last_error() - 返回最后一个PCRE正则执行产生的错误代码