PREG_PATTERN_ORDER對結果排序使 $matches[0] 為全部模式匹配的字串,$matches[1]為第一個括号中的子模式所匹配的字串,以此類推。
- <?php4 L. O+ c! ^1 F, a# s7 g0 P" f& Q
- preg_match_all ("|<[^>]+>(.*)</[^>]+>|U",
" L$ l) C4 k' O" \8 P/ `1 X - "<b>example: </b><div align=left>this is a test</div>",
" l0 H5 v4 f) U8 V( f- [ - $out, PREG_PATTERN_ORDER);6 h; D( U: w& ]* p; ]- t/ f. Q6 W
- print $out[0][0].", ".$out[0][1]."\n";
( f6 Q8 E2 K; ~" ]3 W - print $out[1][0].", ".$out[1][1]."\n";* h+ Y. q% q$ ~& r2 f
- ?>
複製代碼 $ X2 D" W* l$ I# ?8 f
本例將输出:
- <b>example: </b>, <div align=left>this is a test</div>3 S0 o1 H# @/ P' |" g) ^2 s
- example: , this is a test
複製代碼
9 C. H9 F0 _, v" o: Z9 f5 U/ a因此,$out[0] 包含匹配整个模式的字串,$out[1] 包含一對HTML 標記之間的字串。
* N5 h. _# v9 ~4 {& @& }2 f7 v
; o) k2 d6 L8 a& G |4 e' m- i# t
$ K% T/ ]8 W9 X$ a" u# o OPREG_SET_ORDER对结果排序使 $matches[0] 为第一组匹配项的数组,$matches[1] 为第二组匹配项的数组,以此类推。
- <?php3 b v; H8 v. B+ d& O$ V2 x- u
- preg_match_all ("|<[^>]+>(.*)</[^>]+>|U",2 _: Z8 f1 A3 J% F. |2 T9 b1 Z# }
- "<b>example: </b><div align=left>this is a test</div>",
7 I; F$ k$ T: H& Y$ `; M* A - $out, PREG_SET_ORDER);, H6 d. r: l1 Q0 A
- print $out[0][0].", ".$out[0][1]."\n";+ D) q& B* F v1 Y/ n' B3 w
- print $out[1][0].", ".$out[1][1]."\n";
, j+ Y/ ~# o! W" h - ?>
複製代碼 3 C- ]/ e( V( c5 W' b7 Z/ d1 ]+ d
本例将输出:
- <b>example: </b>, example:; T. i$ O4 t8 z& n0 u; q6 `+ m, |
- <div align=left>this is a test</div>, this is a test
) R/ u) A! f. x4 y
複製代碼
. v( n$ _# n0 [0 g$ D/ z8 o本例中,$matches[0] 是第一组匹配结果,$matches[0][0] 包含匹配整个模式的文本,$matches[0][1] 包含匹配第一个子模式的文本,以此类推。同样,$matches[1] 是第二组匹配结果,等等。
PREG_OFFSET_CAPTURE如果设定本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量。注意这改变了返回的数组的值,使其中的每个单元也是一个数组,其中第一项为匹配字符串,第二项为其在 subject 中的偏移量。本标记自 PHP 4.3.0 起可用。
9 E1 P9 F( W: t* p/ }" o! w* T: K) G0 c6 _. O8 d
如果没有给出标记,则假定为 PREG_PATTERN_ORDER。
返回整个模式匹配的次数(可能为零),如果出错返回 FALSE。
/ ~5 I4 U+ v) L' w' Q9 m
例子 1. 从某文本中取得所有的电话号码
- <?php# {1 C8 w5 ?: |/ ^8 v5 o
- preg_match_all ("/\(? (\d{3})? \)? (?(1) [\-\s] ) \d{3}-\d{4}/x",
, @2 I6 o- x% y6 R - "Call 555-1212 or 1-800-555-1212 FREE", $phones);! f* j6 I% }5 x0 K- c
- ?>
複製代碼例子 2. 搜索匹配的 HTML 标记(greedy)
- <?php
, [9 s* s2 R& @/ }& p4 z - // \\2 是一个逆向引用的例子,其在 PCRE 中的含义是
0 q- Q& q4 A! S" B, X2 U - // 必须匹配正则表达式本身中第二组括号内的内容,本例中
1 k8 _1 x9 {6 o& @4 { - // 就是 ([\w]+)。因为字符串在双引号中,所以需要
& I* V% o8 |( O( L' u' R I - // 多加一个反斜线。
. z8 j6 M6 r" i# S+ |7 p& u - $html = "<b>bold text</b><a href=howdy.html>click me</a>";1 I* m5 ~% w1 X' h/ B
- ' R! i ~3 o; ~0 t. Y" o
- preg_match_all ("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/", $html, $matches);
$ n7 L' o. \- L1 E' n3 b
9 \4 i3 ?8 m y- W+ O1 W* N- for ($i=0; $i< count($matches[0]); $i++) {1 f; e. P6 ?) q# q, b
- echo "matched: ".$matches[0][$i]."\n";' t7 }$ @) G& n$ b. A
- echo "part 1: ".$matches[1][$i]."\n";
4 s2 T& x" d |1 `" u0 r - echo "part 2: ".$matches[3][$i]."\n";
4 X' c2 A! H. @ - echo "part 3: ".$matches[4][$i]."\n\n";
3 x6 p7 U8 f3 e4 ^( d - }
- ? P1 S3 ~. _. A; O8 W3 W - ?>
複製代碼本例将输出:
- matched: <b>bold text</b>+ ?. }% [0 X- |2 G% U2 g' V
- part 1: <b>, i/ t J6 q: J; L
- part 2: bold text% K/ b/ U/ y; Z7 p
- part 3: </b>
- p3 S: v1 h+ q2 e# Y4 s* G - $ r+ ]+ w' `+ c
- matched: <a href=howdy.html>click me</a>0 A8 o0 T" h I7 s& M" {1 y3 H
- part 1: <a href=howdy.html>
: V5 p/ Y, g- r1 ?* g - part 2: click me' _ {+ C* ]7 d0 q4 W
- part 3: </a>
複製代碼