站長資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        PHP中基于perl的正則表達(dá)式處理函數(shù)

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

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

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

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

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

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

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

          <?php          $pattern = '/<b>.*?</b>/';       $string = '<b>welcome</b> <b>to</b> <b>phpfuns</b>dsadsadas';       if (preg_match($pattern, $string, $arr)) {         echo "正則表達(dá)式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>";         print_r($arr);       } else {         echo "<font color='red'>正則表達(dá)式{$pattern}和字符串{$string}匹配失敗</font>";       }     ?> 

        2,preg_match_all()函數(shù)。

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

          <?php       $pattern = '/<b>.*?</b>/';       $string = '<b>welcome</b> <b>to</b> <b>phpfuns</b>dsadsadas';       if (preg_match_all($pattern, $string, $arr)) {         echo "正則表達(dá)式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>";         print_r($arr);       } else {         echo "<font color='red'>正則表達(dá)式{$pattern}和字符串{$string}匹配失敗</font>";       }     ?> 

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

        3, preg_replace()函數(shù)

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

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

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

        注意:

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

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

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

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

        請看下面的綜合示例:

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

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

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

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

          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時都代表”不限制”。

        我們來看一個示例:

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

        上例中,我們使用了常量PREG_SPLIT_DELIM_CAPTURE設(shè) 置返回結(jié)果中包含子模式(如果設(shè)置為PREG_SPLIT_NO_EMPTY,preg_split()將進(jìn)返回分隔后的非空部分。)我們?nèi)绻焉侠姓?則表達(dá)式的括號去掉,則結(jié)果中不再包含php和mysql這兩個匹配成功的子模式。

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

        以上內(nèi)容是小編給大家介紹PHP中基于perl的正則表達(dá)式處理函數(shù),希望對大家有所幫助。

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
        主站蜘蛛池模板: 国产精品亚洲成在人线| 911亚洲精品国内自产| 精品国产免费一区二区三区香蕉 | 亚洲精品视频在线看| 韩国精品欧美一区二区三区| 一本一本久久aa综合精品| 国产亚洲精品成人a v小说| 久久久久久久99精品免费观看| 综合在线视频精品专区| 精品一区二区无码AV| 国产精品99| 91嫩草亚洲精品| 国产在线精品一区二区不卡| 国产中老年妇女精品| 亚洲精品高清国产一线久久| 亚洲第一区精品日韩在线播放| 国产福利电影一区二区三区久久久久成人精品综合| 国产乱子伦精品无码码专区| 无码精品人妻一区二区三区人妻斩| 日韩精品免费一线在线观看| 久久久久久无码国产精品中文字幕| 国产成人高清精品一区二区三区| 精品视频在线免费观看| 2022免费国产精品福利在线| 精品人人妻人人澡人人爽人人| 亚洲av午夜福利精品一区人妖| 在线精品自拍无码| 亚洲国产精品成人精品无码区在线 | 亚洲精品A在线观看| 欧美日韩成人精品久久久免费看| 久久久久无码精品国产app| 国产精品哟女在线观看| 国产精品v欧美精品v日本精| 国产精品青草久久久久福利99| 国产精品国产三级国产AⅤ| 国产国产成人久久精品| 国产欧美一区二区精品性色99 | 亚洲精品无码久久久久去q| 在线精品亚洲| 人妻少妇精品无码专区二区| 久久精品aⅴ无码中文字字幕不卡 久久精品aⅴ无码中文字字幕重口 |