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] )
0 z: d+ C3 ~  S8 C4 ?* k7 b6 M! g0 `; z1 u) r

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

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

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

& ^8 E4 @7 X4 p; h/ F. K7 i$ R
PREG_PATTERN_ORDER
對結果排序使 $matches[0] 為全部模式匹配的字串,$matches[1]為第一個括号中的子模式所匹配的字串,以此類推。
  1. <?php1 z2 y7 h; u3 F# I6 K6 ~4 M9 d
  2. preg_match_all ("|<[^>]+>(.*)</[^>]+>|U",' t( ^1 d$ C+ I
  3.     "<b>example: </b><div align=left>this is a test</div>",
    $ n( y" o! D, F* U# g. @4 I
  4.     $out, PREG_PATTERN_ORDER);
    . I4 Z5 m* x; \2 {
  5. print $out[0][0].", ".$out[0][1]."\n";3 q1 z4 R# m6 P1 d4 w! |
  6. print $out[1][0].", ".$out[1][1]."\n";" l6 ~% _6 r" ~) b+ a0 e+ ^$ f  A- P
  7. ?>
複製代碼

1 \5 T# E: H3 J本例將输出:
  1. <b>example: </b>, <div align=left>this is a test</div>
    8 X  q* H( X7 ?. h% i& S' c
  2. example: , this is a test
複製代碼

) h5 l8 _3 K& w6 N9 M$ {! y
因此,$out[0] 包含匹配整个模式的字串,$out[1] 包含一對HTML 標記之間的字串。
! l1 p# I& ]) ^5 x

, o( I/ Z+ ?  m
) q+ X' P( r- }+ b; z' vPREG_SET_ORDER
对结果排序使 $matches[0] 为第一组匹配项的数组,$matches[1] 为第二组匹配项的数组,以此类推。
  1. <?php
    " b! g- d8 G2 @
  2. preg_match_all ("|<[^>]+>(.*)</[^>]+>|U",
    3 E- `; @/ n. }7 i
  3.     "<b>example: </b><div align=left>this is a test</div>",
    8 D+ p# A. [- B! `( B0 S+ O4 `9 l
  4.     $out, PREG_SET_ORDER);
    ! _& R9 D1 Q, z1 B. S
  5. print $out[0][0].", ".$out[0][1]."\n";' r# R" P& p- z; [% b5 [
  6. print $out[1][0].", ".$out[1][1]."\n";
    ) w+ J! I6 _- {2 ?6 F; C
  7. ?>
複製代碼
( `7 f% U% E  ~# r# A& U* S
本例将输出:
  1. <b>example: </b>, example:
    - t/ M( @- f1 t+ H" d1 b% K
  2. <div align=left>this is a test</div>, this is a test0 G  @( X# r+ [7 S6 K/ o1 o
複製代碼

( n1 x) _- A8 D( ?  S" o
本例中,$matches[0] 是第一组匹配结果,$matches[0][0] 包含匹配整个模式的文本,$matches[0][1] 包含匹配第一个子模式的文本,以此类推。同样,$matches[1] 是第二组匹配结果,等等。
PREG_OFFSET_CAPTURE
如果设定本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量。注意这改变了返回的数组的值,使其中的每个单元也是一个数组,其中第一项为匹配字符串,第二项为其在 subject 中的偏移量。本标记自 PHP 4.3.0 起可用。
% E& \& C* i; d) X

8 _! X: {: W/ k/ Q$ P
如果没有给出标记,则假定为 PREG_PATTERN_ORDER。
返回整个模式匹配的次数(可能为零),如果出错返回 FALSE。
9 K) R- L! C. v0 ?  z; A- [
例子 1. 从某文本中取得所有的电话号码
  1. <?php" L$ f- Z7 z  r
  2. preg_match_all ("/\(?  (\d{3})?  \)?  (?(1)  [\-\s] ) \d{3}-\d{4}/x",* H: S. I& g, ?- D- G1 u
  3.                 "Call 555-1212 or 1-800-555-1212 FREE", $phones);. G) y* C- `) F5 Q; E( x
  4. ?>
複製代碼
例子 2. 搜索匹配的 HTML 标记(greedy)
  1. <?php
    9 E! q6 ]; R0 k( L5 [' T) }
  2. // \\2 是一个逆向引用的例子,其在 PCRE 中的含义是+ T" F. B- r9 l4 E2 ?$ Q
  3. // 必须匹配正则表达式本身中第二组括号内的内容,本例中& X- E$ x6 n+ U- |
  4. // 就是 ([\w]+)。因为字符串在双引号中,所以需要9 z7 ]1 ^4 p5 U! Q
  5. // 多加一个反斜线。# ~. L# N0 [# y( b
  6. $html = "<b>bold text</b><a href=howdy.html>click me</a>";4 Y7 ]6 n- [5 Y  b0 K. L
  7. * j1 `& D( K0 z  Y( M  c
  8. preg_match_all ("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/", $html, $matches);! J$ Z! Y) [; y& F- G# Z
  9. ! R: b7 y! }. e6 f, E
  10. for ($i=0; $i< count($matches[0]); $i++) {" I8 J( P9 K* ^+ R$ a* u* Z5 ^: N
  11.   echo "matched: ".$matches[0][$i]."\n";, x+ V% y- q! w' E0 X+ V
  12.   echo "part 1: ".$matches[1][$i]."\n";
    ' M" {: r# Z7 ~+ L6 b7 N' Z+ Z
  13.   echo "part 2: ".$matches[3][$i]."\n";
    " g% ?; M5 R( K1 f6 O* d0 M* Y% c9 F
  14.   echo "part 3: ".$matches[4][$i]."\n\n";8 X6 A* Q( d& b$ A, m$ x, K1 {
  15. }
    + `* R  v/ W- X& g; \- m
  16. ?>
複製代碼
本例将输出:
  1. matched: <b>bold text</b>! [- c. P, ^! V0 r
  2. part 1: <b>
    , h* |# c' L# e' m
  3. part 2: bold text1 l3 o  c, {" f6 P2 A2 r
  4. part 3: </b>
    : N5 E. }1 ~6 j1 `9 C  g4 r
  5. ) y& \1 E& d" K' H7 V7 o- j
  6. matched: <a href=howdy.html>click me</a>) B' G6 d" P' d) T" _# N
  7. part 1: <a href=howdy.html>
    * U/ b8 x# t( x' z' ]" W# Y5 s
  8. part 2: click me9 d1 X; y- _2 i) Z9 J0 U3 R* l
  9. part 3: </a>
複製代碼
- H' I  H  m' @+ u) D

: ^0 f, k- L3 v3 G  |! Q+ j




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