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

 找回密碼
 立即註冊
查看: 1239|回復: 0

[PHP] php中preg_match_all 用法

[複製鏈接]
發表於 2015-8-28 10:27:21 | 顯示全部樓層 |閱讀模式
tid=16929&

int preg_match_all ( string pattern, string subject, array matches [, int flags] )
0 T) J  f9 Q$ u$ }5 c% N5 E, f
# ], l* \4 Q9 l6 G$ r' |

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

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

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


8 F6 p6 V& P" T1 rPREG_PATTERN_ORDER
對結果排序使 $matches[0] 為全部模式匹配的字串,$matches[1]為第一個括号中的子模式所匹配的字串,以此類推。
  1. <?php
    6 y/ _) |# \; p
  2. preg_match_all ("|<[^>]+>(.*)</[^>]+>|U",
    * o" d: E: I  {* u: [* U! b
  3.     "<b>example: </b><div align=left>this is a test</div>",
    " A/ n7 s/ a. d+ @+ F/ D6 R
  4.     $out, PREG_PATTERN_ORDER);
    2 |. ?8 ^& ^7 {" M9 A  j
  5. print $out[0][0].", ".$out[0][1]."\n";
    1 w( i6 M8 C! b7 G) r3 w
  6. print $out[1][0].", ".$out[1][1]."\n";
    9 P/ h8 R0 Q- a. ^, [  M" p3 i& J* S0 o
  7. ?>
複製代碼
$ e7 y7 j" C: ?( O1 t
本例將输出:
  1. <b>example: </b>, <div align=left>this is a test</div>
    * t$ F1 s$ T. h6 d4 b+ W
  2. example: , this is a test
複製代碼

% d' T5 g9 V' i7 P
因此,$out[0] 包含匹配整个模式的字串,$out[1] 包含一對HTML 標記之間的字串。
( j" s# L% U* O: F3 V
( |& \$ U5 T5 C5 w: ^* G) G7 K6 a
0 v+ s1 n4 W; ]) m
PREG_SET_ORDER
对结果排序使 $matches[0] 为第一组匹配项的数组,$matches[1] 为第二组匹配项的数组,以此类推。
  1. <?php
    # _8 _* i+ O- E" R* `/ j
  2. preg_match_all ("|<[^>]+>(.*)</[^>]+>|U",2 T0 H* }5 h# d7 X
  3.     "<b>example: </b><div align=left>this is a test</div>",
    " X9 F7 n8 X# z( C, a8 t
  4.     $out, PREG_SET_ORDER);
    5 }5 _2 n( f9 S' D, _1 g
  5. print $out[0][0].", ".$out[0][1]."\n";
    ' A. x( p! T8 b, z  y; N& k
  6. print $out[1][0].", ".$out[1][1]."\n";
    ' z2 i+ O2 r& M  h7 `; X
  7. ?>
複製代碼

& Y9 |9 H7 ^. k3 m% [本例将输出:
  1. <b>example: </b>, example:4 O- E, G/ {5 H0 }% P- ]
  2. <div align=left>this is a test</div>, this is a test
    ) Q6 F& f  Z  ]
複製代碼
8 c8 i% U1 Q, ~& `' B$ |) F
本例中,$matches[0] 是第一组匹配结果,$matches[0][0] 包含匹配整个模式的文本,$matches[0][1] 包含匹配第一个子模式的文本,以此类推。同样,$matches[1] 是第二组匹配结果,等等。
PREG_OFFSET_CAPTURE
如果设定本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量。注意这改变了返回的数组的值,使其中的每个单元也是一个数组,其中第一项为匹配字符串,第二项为其在 subject 中的偏移量。本标记自 PHP 4.3.0 起可用。

8 c% X' u8 p5 U  ]( v. `( N& P8 ^5 I' `, C( V
如果没有给出标记,则假定为 PREG_PATTERN_ORDER。
返回整个模式匹配的次数(可能为零),如果出错返回 FALSE。

4 A* c; e' t/ }0 }& ?
例子 1. 从某文本中取得所有的电话号码
  1. <?php
    / ?  V+ \+ s: f6 |" e
  2. preg_match_all ("/\(?  (\d{3})?  \)?  (?(1)  [\-\s] ) \d{3}-\d{4}/x",
    , R  g. C( I+ R9 J
  3.                 "Call 555-1212 or 1-800-555-1212 FREE", $phones);6 |0 n" s3 w- s
  4. ?>
複製代碼
例子 2. 搜索匹配的 HTML 标记(greedy)
  1. <?php+ V' x) V) `/ h5 J3 Z
  2. // \\2 是一个逆向引用的例子,其在 PCRE 中的含义是* u) m% g! Q8 h
  3. // 必须匹配正则表达式本身中第二组括号内的内容,本例中/ R7 m9 V+ F/ n: H, L( O0 O
  4. // 就是 ([\w]+)。因为字符串在双引号中,所以需要- v- n  ]% [! k+ X8 I8 t/ ^9 j
  5. // 多加一个反斜线。
    9 L* [- Z2 w+ p0 c! k1 @0 L
  6. $html = "<b>bold text</b><a href=howdy.html>click me</a>";, R" i: c- r: j3 A7 s
  7. ' ?9 u6 u* `  l( c7 D! a
  8. preg_match_all ("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/", $html, $matches);3 m! S" R, W7 R1 B' E9 m( x3 W

  9.   U/ J0 U" U8 {
  10. for ($i=0; $i< count($matches[0]); $i++) {
    0 z5 U7 F  D, v) f
  11.   echo "matched: ".$matches[0][$i]."\n";
    2 q) k0 i$ r* {
  12.   echo "part 1: ".$matches[1][$i]."\n";
    6 j& `7 T% P% m
  13.   echo "part 2: ".$matches[3][$i]."\n";
    " e2 J. ^  a/ y/ P0 v5 v- H
  14.   echo "part 3: ".$matches[4][$i]."\n\n";
    $ p7 e/ S, \) I) z& G" G/ `0 W) s
  15. }5 R* t% x' g+ y  N7 \( Y/ h
  16. ?>
複製代碼
本例将输出:
  1. matched: <b>bold text</b>
    $ Y) v# S7 J1 L6 h
  2. part 1: <b>6 p/ f( `& f! d, C
  3. part 2: bold text, `) Z3 C0 s* F' S
  4. part 3: </b>8 \! B+ q! z2 d" y
  5. * h3 W. O1 i" M# j5 R9 D; E
  6. matched: <a href=howdy.html>click me</a>7 O& S+ Q' f3 m1 Z$ z3 t! H+ ^
  7. part 1: <a href=howdy.html>: x* q4 {) q  {* [- @$ Y
  8. part 2: click me
    9 U" \' L4 `3 F
  9. part 3: </a>
複製代碼

- i* j1 i" l5 c1 Y; Y5 Y+ @
5 l2 q( j4 s' m+ U  L0 v/ [0 m
回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則



中文酷站排行榜

本區塊內容依據『電腦網路內容分級處理辦法』為限制級網站,限定年滿18歲以上或達當地國家法定年齡人士方可進入,且願接受本站各項條款,未滿18歲 謝絕進入瀏覽。為防範未滿18歲之未成年網友瀏覽網路上限制級內容的圖文資訊,建議您可進行網路內容分級組織ICRA分級服務的安裝與設定。 (為還給愛護 本站的網友一個純淨的論壇環境,本站設有管理員)

QQ|小黑屋|手機板| 52AV手機A片王

GMT+8, 2024-10-29 04:34 , Processed in 0.094045 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回復 返回頂部 返回列表