自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

正則表達式之正則處理函數(shù)

開發(fā) 后端
和正則表達式一樣,正則表達式處理函數(shù)不能夠獨立使用,而這必須相結合,才能夠完成特定的功能。我們只介紹以preg開頭的基于perl的正則表達式。

前面我們已經(jīng)學習了正則表達式的基礎語法,包括了定界符、原子、元字符和模式修正 符。實際上正則表達式想要起作用的話,就必須借用正則表達式處理函數(shù)。本節(jié)我們就來介紹一下PHP中基于perl的正則表達式處理函數(shù),主要包含了分割, 匹配,查找,替換等等處理操作,依舊是配合示例講解,讓我們開始吧。

和正則表達式一樣,正則表達式處理函數(shù)不能夠獨立使用,而這必須相結合,才能夠完成特定的功能。在前面我們也說過,基于perl的正則表達式要快于POXIS正則表達式處理函數(shù),所以我們只介紹以preg開頭的基于perl的正則表達式。注意:在能偶使用字符串函數(shù)處理的時候,就不要使用正則表達式來處理字符串,因為字符串處理函數(shù)更快。

下面我們來看一些常用的正則表達式處理函數(shù)。

1,preg_match()函數(shù)。

函數(shù)preg_match()執(zhí)行一個正則表達式匹配,其定義如下:

  1. int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] ) 

實際上就是搜索subject中匹配pattern的部分, 以保存在數(shù)組matches中.請看示例:

  1. <?php    
  2.  
  3.      $pattern = '/<b>.*?<\/b>/';    
  4.      $string = '<b>welcome</b> <b>to</b> <b>phpfuns</b>dsadsadas';    
  5.      if (preg_match($pattern$string$arr)) {    
  6.          echo "正則表達式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>";    
  7.          print_r($arr);    
  8.      } else {    
  9.          echo "<font color='red'>正則表達式{$pattern}和字符串{$string}匹配失敗</font>";    
  10.      }    
  11.  ?>   
  12.  
2,preg_match_all()函數(shù)。

函數(shù)preg_match_all()函數(shù)執(zhí)行一個全局正則表達式匹配,其定義和preg_match()函數(shù)一致,只不過匹配了全部結果。請看示例:

  1. <?php    
  2.      $pattern = '/<b>.*?<\/b>/';    
  3.      $string = '<b>welcome</b> <b>to</b> <b>phpfuns</b>dsadsadas';    
  4.      if (preg_match_all($pattern$string$arr)) {    
  5.          echo "正則表達式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>";    
  6.          print_r($arr);    
  7.      } else {    
  8.          echo "<font color='red'>正則表達式{$pattern}和字符串{$string}匹配失敗</font>";    
  9.      }    
  10.  ?>   
  11.  

依舊是上面的示例(只換了正則處理函數(shù)為preg_match_all()),但是匹配的結果數(shù)組內容不一樣了。

3, preg_replace()函數(shù)

函數(shù)preg_replace()執(zhí)行一個正則表達式替換,其定義如下:

mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

實際上就是搜索subject中匹配pattern的部分, 以replacement進行替換.其中l(wèi)imit指的是每個模式在每個subject上進行替換的最大次數(shù). 默認是 -1(無限). 如果指定count,將會被填充為完成的替換次數(shù).

注意:

A,如果subject是一個數(shù)組, preg_replace()返回一個數(shù)組, 其他情況下返回一個字符串.

B,如果匹配被查找到, 替換后的subject被返回, 其他情況下返回沒有改變的subject. 如果發(fā)生錯誤, 返回NULL .

C,子模式可以應用到參數(shù)replacement中,使用方式為\n或者${n}。(在正則表達式的模式中我們只能使用\n的形式來獲取已經(jīng)匹配的子模式,切記?。?/font>

D,如果使用模式修正符e,則參數(shù)replacement中可以解析函數(shù)。(在其它的正則表達式處理函數(shù)中,模式修正符e均被忽略!)

請看下面的綜合示例:

  1. <?php    
  2.     $pattern = '/(php)|(mysql)/e';    
  3.     $string = '這個字符串中的php和mysql被替換成大寫的了!';    
  4.     $result = preg_replace($pattern'strtoupper("${1}\2")'$string, -1, $count);    
  5.     echo $result.'<br>';    
  6.     echo $count;    
  7. ?>   

上例中,我們使用了模式修正符e,這樣的話strtoupper()函數(shù)就可以當作字符串被解析,這就是模式修正符e的作用!而參數(shù)${1}和\2分別是子模式1和子模式2。上例的作用就是將字符串$string中匹配到的子模式php和mysql替換成大寫字母!

4,preg_split()函數(shù)。

preg_split執(zhí)行一個正則表達式分隔字符串。其定義如下:

array preg_split ( string $pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]] )

實際上就是將subject按照pattern分割,返回分割后的數(shù)組。其中,limit將限制分隔得到的子串最多只有l(wèi)imit個, 返回的最后一個子串將包含所有剩余部分.limit值為-1, 0或null時都代表"不限制"。

我們來看一個示例:

  1. <?php    
  2.      $pattern = '/<p>(.*?)<\/p>/';    
  3.      $string = '這個字符串中的<p>php</p>和<p>mysql</p>被分割了!';    
  4.      $result = preg_split($pattern$string, -1, PREG_SPLIT_DELIM_CAPTURE);    
  5.      print_r($result);    
  6.  ?>   
  7.  

上例中,我們使用了常量PREG_SPLIT_DELIM_CAPTURE設 置返回結果中包含子模式(如果設置為PREG_SPLIT_NO_EMPTY,preg_split()將進返回分隔后的非空部分。)我們如果把上例中正 則表達式的括號去掉,則結果中不再包含php和mysql這兩個匹配成功的子模式。

常用的正則表達式處理函數(shù)我們就介紹完了,本節(jié)的例子可能會難一些,但希望大家還是認真的試驗并體會一下,后面的正則表達式應用部分,我們會經(jīng)常使用正則表達式處理函數(shù)。

原文地址:http://www.phpfuns.com/php/php-regexp-functions.shtml

責任編輯:張偉 來源: phpFuns
相關推薦

2017-05-12 10:47:45

Linux正則表達式程序基礎

2009-06-08 16:49:05

Java正則表達式group

2018-09-27 15:25:08

正則表達式前端

2020-09-04 09:16:04

Python正則表達式虛擬機

2011-05-11 17:40:30

PHP正則表達式

2024-09-14 09:18:14

Python正則表達式

2010-03-25 18:25:36

Python正則表達式

2021-01-27 11:34:19

Python正則表達式字符串

2009-02-18 09:48:20

正則表達式Java教程

2009-09-16 18:19:34

正則表達式組

2011-06-02 12:34:16

正則表達式

2019-07-17 15:45:47

正則表達式字符串前端

2022-03-28 06:19:14

正則表達式開發(fā)

2016-11-10 16:21:22

Java 正則表達式

2022-01-04 11:35:03

Linux Shel正則表達式Linux

2023-09-13 08:12:45

2009-09-16 17:15:57

正則表達式引擎

2009-09-16 09:58:53

PHP正則表達式函數(shù)

2009-09-16 10:43:22

PHP正則表達式函數(shù)

2021-12-03 08:50:25

LeetCode正則表達式算法
點贊
收藏

51CTO技術棧公眾號