1. 程式人生 > >PHP 正則表示式匹配函式 preg_match 與 preg_match_all

PHP 正則表示式匹配函式 preg_match 與 preg_match_all

preg_match()

preg_match() 函式用於進行正則表示式匹配,成功返回 1 ,否則返回 0 。

語法:

1 int preg_match( string pattern, string subject [, array matches ] )

引數說明:

引數 說明
pattern 正則表示式
subject 需要匹配檢索的物件
matches 可選,儲存匹配結果的陣列, $matches[0] 將包含與整個模式匹配的文字,$matches[1] 將包含與第一個捕獲的括號中的子模式所匹配的文字,以此類推

例子 1:

1 2 3 4 5 6 7 8 9 <?php if (preg_match( "/php/i" , "PHP is the web scripting language of choice." , $matches )) {      print
"A match was found:" . $matches [0]; } else {      print "A match was not found." ; }

輸出:

1 A match was found:PHP

在該例子中,由於使用了 i 修正符,因此會不區分大小寫去文字中匹配 php 。

 

注意:

preg_match() 第一次匹配成功後就會停止匹配,如果要實現全部結果的匹配,即搜尋到subject結尾處,則需使用 preg_match_all() 函式。

例子 2 ,從一個 URL 中取得主機域名 :

1 2 3 4 5 6 7 8 <?php // 從 URL 中取得主機名 preg_match( "/^(http:\/\/)?([^\/]+)/i" , "http://blog.snsgou.com/index.php" , $matches ); $host = $matches [2];   // 從主機名中取得後面兩段 preg_match( "/[^\.\/]+\.[^\.\/]+$/" , $host , $matches ); echo "域名為:{$matches[0]}" ;

輸出:

1 域名為:snsgou.com

 

preg_match_all()

preg_match_all() 函式用於進行正則表示式全域性匹配,成功返回整個模式匹配的次數(可能為零),如果出錯返回 FALSE 。

語法:

1 int preg_match_all( string pattern, string subject, array matches [, int flags ] )

引數說明:

引數 說明
pattern 正則表示式
subject 需要匹配檢索的物件
matches 儲存匹配結果的陣列
flags

可選,指定匹配結果放入 matches 中的順序,可供選擇的標記有:

  1. PREG_PATTERN_ORDER:預設,對結果排序使 $matches[0] 為全部模式匹配的陣列,$matches[1] 為第一個括號中的子模式所匹配的字串組成的陣列,以此類推
  2. PREG_SET_ORDER:對結果排序使 $matches[0] 為第一組匹配項的陣列,$matches[1] 為第二組匹配項的陣列,以此類推
  3. PREG_OFFSET_CAPTURE:如果設定本標記,對每個出現的匹配結果也同時返回其附屬的字串偏移量

下面的例子演示了將文字中所有 <pre></pre> 標籤內的關鍵字(php)顯示為紅色。

1 2 3 4 5 6 7 8 9 10 11 12 <?php $str = "<pre>學習php是一件快樂的事。</pre><pre>所有的phper需要共同努力!</pre>" ; $kw = "php" ; preg_match_all( '/<pre>([\s\S]*?)<\/pre>/' , $str , $mat ); for ( $i = 0; $i < count ( $mat [0]); $i ++) {      $mat [0][ $i ] = $mat [1][ $i ];      $mat [0][ $i ] = str_replace ( $kw , '<span style="color:#ff0000">' . $kw . '</span>' , $mat [0][ $i ]);      $str = str_replace ( $mat [1][ $i ], $mat [0][ $i ], $str ); } echo $str ; ?>

輸出效果:

 

簡化一下:

1 2 3 4 5 <?php $str = "<pre>學習php是一件快樂的事。</pre><pre>所有的phper需要共同努力!</pre>" ; preg_match_all( '/<pre>([\s\S]*?)<\/pre>/' , $str , $matches ); print_r( $matches ); ?>

輸出:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Array (      [0] => Array          (              [0] => <pre>學習php是一件快樂的事。</pre>              [1] => <pre>所有的phper需要共同努力!</pre>          )        [1] => Array          (              [0] => 學習php是一件快樂的事。              [1] => 所有的phper需要共同努力!          )   )