52AV手機A片王|52AV.ONE

標題: php中preg_match_all 用法 [打印本頁]

作者: IT_man    時間: 2015-8-28 10:27
標題: php中preg_match_all 用法

int preg_match_all ( string pattern, string subject, array matches [, int flags] )
( C& x* Z  {/ _: z: E2 C8 G, a  ^' i# j; \8 e$ K

在 subject 中搜索所有與pattern 给出的正規表示式匹配的内容並將结果以 flags 指定的順序放到 matches 中。

搜索到第一个匹配項之后,接下来的搜索從上一個匹配項末尾開始。

flags 可以是下列標記的組合(注意把 PREG_PATTERN_ORDER 和 PREG_SET_ORDER 合起來用没有意義):


# k! c. i: i+ J  T# ?2 d2 I4 ~& FPREG_PATTERN_ORDER
對結果排序使 $matches[0] 為全部模式匹配的字串,$matches[1]為第一個括号中的子模式所匹配的字串,以此類推。
  1. <?php4 L. O+ c! ^1 F, a# s7 g0 P" f& Q
  2. preg_match_all ("|<[^>]+>(.*)</[^>]+>|U",
    " L$ l) C4 k' O" \8 P/ `1 X
  3.     "<b>example: </b><div align=left>this is a test</div>",
    " l0 H5 v4 f) U8 V( f- [
  4.     $out, PREG_PATTERN_ORDER);6 h; D( U: w& ]* p; ]- t/ f. Q6 W
  5. print $out[0][0].", ".$out[0][1]."\n";
    ( f6 Q8 E2 K; ~" ]3 W
  6. print $out[1][0].", ".$out[1][1]."\n";* h+ Y. q% q$ ~& r2 f
  7. ?>
複製代碼
$ X2 D" W* l$ I# ?8 f
本例將输出:
  1. <b>example: </b>, <div align=left>this is a test</div>3 S0 o1 H# @/ P' |" g) ^2 s
  2. 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] 为第二组匹配项的数组,以此类推。
  1. <?php3 b  v; H8 v. B+ d& O$ V2 x- u
  2. preg_match_all ("|<[^>]+>(.*)</[^>]+>|U",2 _: Z8 f1 A3 J% F. |2 T9 b1 Z# }
  3.     "<b>example: </b><div align=left>this is a test</div>",
    7 I; F$ k$ T: H& Y$ `; M* A
  4.     $out, PREG_SET_ORDER);, H6 d. r: l1 Q0 A
  5. print $out[0][0].", ".$out[0][1]."\n";+ D) q& B* F  v1 Y/ n' B3 w
  6. print $out[1][0].", ".$out[1][1]."\n";
    , j+ Y/ ~# o! W" h
  7. ?>
複製代碼
3 C- ]/ e( V( c5 W' b7 Z/ d1 ]+ d
本例将输出:
  1. <b>example: </b>, example:; T. i$ O4 t8 z& n0 u; q6 `+ m, |
  2. <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. 从某文本中取得所有的电话号码
  1. <?php# {1 C8 w5 ?: |/ ^8 v5 o
  2. preg_match_all ("/\(?  (\d{3})?  \)?  (?(1)  [\-\s] ) \d{3}-\d{4}/x",
    , @2 I6 o- x% y6 R
  3.                 "Call 555-1212 or 1-800-555-1212 FREE", $phones);! f* j6 I% }5 x0 K- c
  4. ?>
複製代碼
例子 2. 搜索匹配的 HTML 标记(greedy)
  1. <?php
    , [9 s* s2 R& @/ }& p4 z
  2. // \\2 是一个逆向引用的例子,其在 PCRE 中的含义是
    0 q- Q& q4 A! S" B, X2 U
  3. // 必须匹配正则表达式本身中第二组括号内的内容,本例中
    1 k8 _1 x9 {6 o& @4 {
  4. // 就是 ([\w]+)。因为字符串在双引号中,所以需要
    & I* V% o8 |( O( L' u' R  I
  5. // 多加一个反斜线。
    . z8 j6 M6 r" i# S+ |7 p& u
  6. $html = "<b>bold text</b><a href=howdy.html>click me</a>";1 I* m5 ~% w1 X' h/ B
  7. ' R! i  ~3 o; ~0 t. Y" o
  8. preg_match_all ("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/", $html, $matches);
    $ n7 L' o. \- L1 E' n3 b

  9. 9 \4 i3 ?8 m  y- W+ O1 W* N
  10. for ($i=0; $i< count($matches[0]); $i++) {1 f; e. P6 ?) q# q, b
  11.   echo "matched: ".$matches[0][$i]."\n";' t7 }$ @) G& n$ b. A
  12.   echo "part 1: ".$matches[1][$i]."\n";
    4 s2 T& x" d  |1 `" u0 r
  13.   echo "part 2: ".$matches[3][$i]."\n";
    4 X' c2 A! H. @
  14.   echo "part 3: ".$matches[4][$i]."\n\n";
    3 x6 p7 U8 f3 e4 ^( d
  15. }
    - ?  P1 S3 ~. _. A; O8 W3 W
  16. ?>
複製代碼
本例将输出:
  1. matched: <b>bold text</b>+ ?. }% [0 X- |2 G% U2 g' V
  2. part 1: <b>, i/ t  J6 q: J; L
  3. part 2: bold text% K/ b/ U/ y; Z7 p
  4. part 3: </b>
    - p3 S: v1 h+ q2 e# Y4 s* G
  5. $ r+ ]+ w' `+ c
  6. matched: <a href=howdy.html>click me</a>0 A8 o0 T" h  I7 s& M" {1 y3 H
  7. part 1: <a href=howdy.html>
    : V5 p/ Y, g- r1 ?* g
  8. part 2: click me' _  {+ C* ]7 d0 q4 W
  9. part 3: </a>
複製代碼
2 z2 @' G4 a. _2 T4 D& `7 ]
5 F6 I* K) u  V9 s





歡迎光臨 52AV手機A片王|52AV.ONE (https://www.52av.one/) Powered by Discuz! X3.2