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] )  n, y* P3 m: v1 v7 n3 ?3 N2 r: W  i
! |2 l5 Y% ?4 c! F- N% T: C- p. |& {

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

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

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


9 X3 T# @+ H% M, l/ DPREG_PATTERN_ORDER
對結果排序使 $matches[0] 為全部模式匹配的字串,$matches[1]為第一個括号中的子模式所匹配的字串,以此類推。
  1. <?php
    0 @" Q) E6 w% O
  2. preg_match_all ("|<[^>]+>(.*)</[^>]+>|U",# D" @: `, L& `- p/ }
  3.     "<b>example: </b><div align=left>this is a test</div>",. l2 S' D" t1 D# d
  4.     $out, PREG_PATTERN_ORDER);3 F! U( p  K& Q! Q
  5. print $out[0][0].", ".$out[0][1]."\n";# F8 m' j6 w: F
  6. print $out[1][0].", ".$out[1][1]."\n";- h/ Q5 Q* ?# ^
  7. ?>
複製代碼
0 L$ U/ Z! V& a6 w! a7 O
本例將输出:
  1. <b>example: </b>, <div align=left>this is a test</div>
    % X7 p+ F' L7 c* g" O, n
  2. example: , this is a test
複製代碼
/ v0 n5 ~6 `: U. n/ w. \
因此,$out[0] 包含匹配整个模式的字串,$out[1] 包含一對HTML 標記之間的字串。

* r3 R3 b' H1 i, B2 N7 l5 d2 A6 P0 L
! X% o. h6 Q; z0 F* r( I
PREG_SET_ORDER
对结果排序使 $matches[0] 为第一组匹配项的数组,$matches[1] 为第二组匹配项的数组,以此类推。
  1. <?php
    / e# y5 g. o& |" V' y1 x  l
  2. preg_match_all ("|<[^>]+>(.*)</[^>]+>|U",1 R& A. F) q* e( z8 P; L
  3.     "<b>example: </b><div align=left>this is a test</div>",
    & [. S7 b  `7 v  c1 R$ `" ]) F
  4.     $out, PREG_SET_ORDER);
    # D' @; O! r: s( |* l! W) s5 }" ^
  5. print $out[0][0].", ".$out[0][1]."\n";! X' F. U  G* o, M
  6. print $out[1][0].", ".$out[1][1]."\n";% V( d9 F4 Z2 d& H6 b  q# l: S* |9 t
  7. ?>
複製代碼

  o0 f9 h8 D+ x8 ~2 W6 O% q本例将输出:
  1. <b>example: </b>, example:
    2 ^  O, ^/ s9 a$ w6 ]1 o
  2. <div align=left>this is a test</div>, this is a test! b7 x2 {: @! l& m
複製代碼
* g5 T( g, l6 p/ B8 M. S8 U, N
本例中,$matches[0] 是第一组匹配结果,$matches[0][0] 包含匹配整个模式的文本,$matches[0][1] 包含匹配第一个子模式的文本,以此类推。同样,$matches[1] 是第二组匹配结果,等等。
PREG_OFFSET_CAPTURE
如果设定本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量。注意这改变了返回的数组的值,使其中的每个单元也是一个数组,其中第一项为匹配字符串,第二项为其在 subject 中的偏移量。本标记自 PHP 4.3.0 起可用。

- h% q1 {' d9 a  o9 d% @
0 x! c" B1 G7 J! Z3 R1 F9 g6 Z# t
如果没有给出标记,则假定为 PREG_PATTERN_ORDER。
返回整个模式匹配的次数(可能为零),如果出错返回 FALSE。

# Z' Y. ~% N) v- R* e6 i2 \
例子 1. 从某文本中取得所有的电话号码
  1. <?php
    1 K/ F. x/ b  r+ M  h. ?/ u; |; y- w
  2. preg_match_all ("/\(?  (\d{3})?  \)?  (?(1)  [\-\s] ) \d{3}-\d{4}/x",
      {+ Q# c8 |+ T! w
  3.                 "Call 555-1212 or 1-800-555-1212 FREE", $phones);+ x; n# g+ X6 u* A& @! H7 t
  4. ?>
複製代碼
例子 2. 搜索匹配的 HTML 标记(greedy)
  1. <?php8 @6 N. E9 |+ z# ?% d4 l* _
  2. // \\2 是一个逆向引用的例子,其在 PCRE 中的含义是0 U$ ]8 r3 C' y+ r# m3 g/ b8 \
  3. // 必须匹配正则表达式本身中第二组括号内的内容,本例中
    + x5 `0 a$ h) a* t4 h. _8 o' J
  4. // 就是 ([\w]+)。因为字符串在双引号中,所以需要2 r$ W# @1 C. v
  5. // 多加一个反斜线。# ^7 D$ p' V8 f& |1 E+ u
  6. $html = "<b>bold text</b><a href=howdy.html>click me</a>";
    ) ?0 F9 Z& d, R% D, ?6 o+ y( g9 l
  7. 3 K/ o7 O& y! f) Z* `8 f5 c+ {  r
  8. preg_match_all ("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/", $html, $matches);
    % W* s& i$ y& V7 H3 t9 |

  9. * @- N. M1 u0 Z( k
  10. for ($i=0; $i< count($matches[0]); $i++) {& s6 T. `, Y% M- l
  11.   echo "matched: ".$matches[0][$i]."\n";, A& F& V2 {- i- M; ~- ]3 X) n
  12.   echo "part 1: ".$matches[1][$i]."\n";0 |- \( [! j4 |3 @# a1 `7 q1 M
  13.   echo "part 2: ".$matches[3][$i]."\n";
    ! l1 I0 L' k# t* Z& T( M
  14.   echo "part 3: ".$matches[4][$i]."\n\n";
    ( U# K8 M& J- v% `$ Z$ z, n
  15. }
    * L9 g' Y$ t) y! s
  16. ?>
複製代碼
本例将输出:
  1. matched: <b>bold text</b>- p1 b: i# c$ v
  2. part 1: <b>
    & `% u, K+ i* |( Q: X9 X: m$ O4 k
  3. part 2: bold text
    / c* u. ]# [% U6 ]9 \1 d4 {+ o
  4. part 3: </b>: G" F- k2 o, Y; A
  5. 3 a9 h9 G0 Q2 {. L9 V5 H5 d( u
  6. matched: <a href=howdy.html>click me</a>
    & i: [5 N' f1 S& p$ h! I5 V
  7. part 1: <a href=howdy.html>" D- J! l& K( p- s5 v- Y$ @
  8. part 2: click me
    1 f7 j/ v4 G1 u  r, d; D
  9. part 3: </a>
複製代碼
# r, v, L# ]' o5 P4 A! r% z
* _% ~, O6 f( o* Y& M$ q





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