国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > regex > 正文

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

2020-01-20 22:08:15
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

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

和正則表達(dá)式一樣,正則表達(dá)式處理函數(shù)不能夠獨(dú)立使用,而這必須相結(jié)合,才能夠完成特定的功能。在前面我們也說(shuō)過(guò),基于perl的正則表達(dá)式要快于POXIS正則表達(dá)式處理函數(shù),所以我們只介紹以preg開(kāi)頭的基于perl的正則表達(dá)式。注意:在能偶使用字符串函數(shù)處理的時(shí)候,就不要使用正則表達(dá)式來(lái)處理字符串,因?yàn)樽址幚砗瘮?shù)更快。

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

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

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

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

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

<?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í)行一個(gè)全局正則表達(dá)式匹配,其定義和preg_match()函數(shù)一致,只不過(guò)匹配了全部結(jié)果。請(qǐng)看示例:

<?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í)行一個(gè)正則表達(dá)式替換,其定義如下:

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

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

注意:

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

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

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

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

請(qǐng)看下面的綜合示例:

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

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

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

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

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

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

我們來(lái)看一個(gè)示例:

<?php     $pattern = '/<p>(.*?)<//p>/';     $string = '這個(gè)字符串中的<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á)式的括號(hào)去掉,則結(jié)果中不再包含php和mysql這兩個(gè)匹配成功的子模式。

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

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

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 石狮市| 新闻| 芒康县| 遂平县| 千阳县| 玉山县| 海淀区| 金山区| 砀山县| 沅江市| 曲水县| 乐都县| 嘉义市| 甘泉县| 望奎县| 禹州市| 平昌县| 景德镇市| 遵义县| 柘荣县| 金昌市| 怀集县| 三穗县| 多伦县| 安义县| 淮滨县| 琼海市| 南华县| 昂仁县| 施秉县| 竹溪县| 洛阳市| 苏尼特右旗| 恩施市| 宜良县| 夏津县| 梁平县| 惠来县| 广宗县| 正定县| 淮安市|