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

        詳解PHP正則表達(dá)式替換實(shí)現(xiàn)(PHP preg_replace,PHP preg_replace)

        PHP正則表達(dá)式替換實(shí)現(xiàn)是如何的呢?首先向你介紹下PHP preg_replace,PHP preg_replace的使用是我們實(shí)現(xiàn)的方法,那么對(duì)于PHP正則表達(dá)式替換實(shí)現(xiàn)過(guò)程我們從實(shí)例入手。

        PHP正則表達(dá)式替換的相關(guān)概念:

        preg_replace:執(zhí)行正則表達(dá)式的搜索和替換

          mixed preg_replace (    mixed pattern,    mixed replacement,    mixed subject [, int limit]) 

        preg_replace:允許你替換字符串中匹配到你定義的正則表達(dá)式。

        一個(gè)簡(jiǎn)單的注釋移除功能:

        preg_replace(‘[(/*)+.+(*/)]’, ”, $val);

        這段代碼可以移除在 PHP 和 CSS 中使用 /* 注釋 */ 格式的多多行注釋。其中的三個(gè)參數(shù)分別為正則表達(dá)式,要替換成的字符串和要替換的目標(biāo)字符串(這里要做移除功能,所以是個(gè)空白字符串 -> ”)。如果你想匹配次級(jí)規(guī)則,可以使用 $0 代表全部匹配,$1、$2 等,以此類推代表分別的次級(jí)規(guī)則。

        在 subject 中搜索 pattern 模式的匹配項(xiàng)并替換為 replacement。如果指定了 limit,則僅替換 limit 個(gè)匹配,如果省略 limit 或者其值為 -1,則所有的匹配項(xiàng)都會(huì)被替換。

        replacement 可以包含 //n 形式或(自 PHP 4.0.4 起)$n 形式的逆向引用,首選使用后者。每個(gè)此種引用將被替換為與第 n 個(gè)被捕獲的括號(hào)內(nèi)的子模式所匹配的文本。n 可以從 0 到 99,其中 //0 或 $0 指的是被整個(gè)模式所匹配的文本。對(duì)左圓括號(hào)從左到右計(jì)數(shù)(從 1 開始)以取得子模式的數(shù)目。

        對(duì)替換模式在一個(gè)逆向引用后面緊接著一個(gè)數(shù)字時(shí)(即:緊接在一個(gè)匹配的模式后面的數(shù)字),不能使用熟悉的 //1 符號(hào)來(lái)表示逆向引用。舉例說(shuō) //11,將會(huì)使 preg_replace() 搞不清楚是想要一個(gè) //1 的逆向引用后面跟著一個(gè)數(shù)字 1 還是一個(gè) //11 的逆向引用。本例中的解決方法是使用 /${1}1。這會(huì)形成一個(gè)隔離的 $1 逆向引用,而使另一個(gè) 1 只是單純的文字。

        PHP正則表達(dá)式替換的相關(guān)實(shí)例:

        例子 1. 逆向引用后面緊接著數(shù)字的用法

          <?php   $string = "April 15, 2003";   $pattern = "/(/w+) (/d+), (/d+)/i";   $replacement = "/${1}1,/$3";   print preg_replace($pattern, $replacement, $string);   /* Output     ======   April1,2003   */   ?>  

        如果搜索到匹配項(xiàng),則會(huì)返回被替換后的 subject,否則返回原來(lái)不變的 subject。

        preg_replace() 的每個(gè)參數(shù)(除了 limit)都可以是一個(gè)數(shù)組。如果 pattern 和 replacement 都是數(shù)組,將以其鍵名在數(shù)組中出現(xiàn)的順序來(lái)進(jìn)行處理。這不一定和索引的數(shù)字順序相同。如果使用索引來(lái)標(biāo)識(shí)哪個(gè) pattern 將被哪個(gè) replacement 來(lái)替換,應(yīng)該在調(diào)用 preg_replace() 之前用 ksort() 對(duì)數(shù)組進(jìn)行排序。

        例子 2. 在 preg_replace() 中使用索引數(shù)組

          <?php   $string =    "The quick brown fox jumped over the lazy dog.";   $patterns[0] = "/quick/";   $patterns[1] = "/brown/";   $patterns[2] = "/fox/";   $replacements[2] = "bear";   $replacements[1] = "black";   $replacements[0] = "slow";   print preg_replace($patterns, $replacements, $string);   /* Output     ======   The bear black slow jumped over the lazy dog.   */   /* By ksorting patterns and replacements,     we should get what we wanted. */   ksort($patterns);   ksort($replacements);   print preg_replace($patterns, $replacements, $string);   /* Output     ======   The slow black bear jumped over the lazy dog.   */   ?>      

        如果 subject 是個(gè)數(shù)組,則會(huì)對(duì) subject 中的每個(gè)項(xiàng)目執(zhí)行搜索和替換,并返回一個(gè)數(shù)組。

        如果 pattern 和 replacement 都是數(shù)組,則 preg_replace() 會(huì)依次從中分別取出值來(lái)對(duì) subject 進(jìn)行搜索和替換。如果 replacement 中的值比 pattern 中的少,則用空字符串作為余下的替換值。如果 pattern 是數(shù)組而 replacement 是字符串,則對(duì) pattern 中的每個(gè)值都用此字符串作為替換值。反過(guò)來(lái)則沒(méi)有意義了。

        /e 修正符使 preg_replace() 將 replacement 參數(shù)當(dāng)作 PHP 代碼(在適當(dāng)?shù)哪嫦蛞锰鎿Q完之后)。提示:要確保 replacement 構(gòu)成一個(gè)合法的 PHP 代碼字符串,否則 PHP 會(huì)在報(bào)告在包含 preg_replace() 的行中出現(xiàn)語(yǔ)法解析錯(cuò)誤。

        例子 3. 替換數(shù)個(gè)值

          <?php   $patterns = array    ("/(19|20)(/d{2})-(/d{1,2})-(/d{1,2})/",             "/^/s*{(/w+)}/s*=/");   $replace = array    ("http://3///4///1//2", "$//1 =");   print preg_replace    ($patterns, $replace, "{startDate} = 1999-5-27");   ?> 

        本例將輸出:

        $startDate = 5/27/1999

        例子 4. 使用 /e 修正符

          <?php   preg_replace    ("/(<//?)(/w+)([^>]*>)/e",   "'//1'.strtoupper('//2').'//3'",   $html_body);   ?> 

        這將使輸入字符串中的所有 HTML 標(biāo)記變成大寫,以上的實(shí)例運(yùn)行支持版本為PHP 3>= 3.0.9, PHP 4。

        PHP正則表達(dá)式替換的相關(guān)內(nèi)容就向你介紹到這里,希望那個(gè)對(duì)你了解和掌握PHP正則表達(dá)式替換有所幫助。

        用正則表達(dá)式替換內(nèi)容 php

        以前做一個(gè)項(xiàng)目,就是有一個(gè)問(wèn)答的頁(yè)面,比如說(shuō)在回答或者提問(wèn)的內(nèi)容中插入表情。寫到內(nèi)容里的是表情圖片的名字(而且是不帶后綴的,比如:f_002.png)表情包放在項(xiàng)目里,我需要在取除內(nèi)容的時(shí)候?qū)⒗锩娴谋砬槊痔鎿Q成圖片。

        存到數(shù)據(jù)庫(kù)中的內(nèi)容是這樣的:   不知道[f_013]    (最后面的這個(gè)[f_013]就是表情圖在數(shù)據(jù)庫(kù)中存放的形式)

        我需要做的就是從數(shù)據(jù)庫(kù)中取出內(nèi)容,并且把內(nèi)容中的像這樣的字符 [f_013] 處理成圖片地址,很顯然這里需要用到正則表達(dá)式。

        1.首先我得先找到這個(gè)字符串

        $rule = “/(?:[)(f_.[0-9]{1,3})(?:])/i”;

        這個(gè)正則匹配可以幫我找到表情的字符串

        2.找到后就是把這個(gè)字符串換成表情圖片存放的地址,這里用到了一個(gè)函數(shù)就是正則表達(dá)式的替換。

        就是這個(gè)函數(shù):preg_match_all

        echo preg_replace(“/(?:[)(f_.[0-9]{1,3})(?:])/i”,”<img src=’__PUBLIC__/face/${1}.png’>”,$line[‘content’]);
        $line[‘content’]   這個(gè)是我從數(shù)據(jù)庫(kù)中取出的內(nèi)容,

        “<img src=’__PUBLIC__/face/${1}.png’>”  這個(gè)是我將要替換的圖片地址,比如我的圖片地址是這樣的<img src=”__PUBLIC__/face/f_013.png”>

        這里面有一個(gè)非常重要的知識(shí)點(diǎn): “${1}”   它就是那個(gè)存放在數(shù)據(jù)庫(kù)里面表情的字符串。

        ${1} = f_013

        我這里有我替換的一個(gè)完整代碼:

          <?php  $result = array();     $n = preg_match_all("/(?:[)(f_.[0-9]{1,3})(?:])/i",$line['content'], $result); /*返回查找到符合條件的字符串的個(gè)數(shù)*/     if($n == 0 || $n == false)  /*如果是0或者false就說(shuō)明沒(méi)有表情*/     {      echo $line['content'];     }else     {       echo preg_replace("/(?:[)(f_.[0-9]{1,3})(?:])/i","<img src='__PUBLIC__/face/${1}.png'>",$line['content']);     }     ?>  

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
        主站蜘蛛池模板: 欧美人与性动交α欧美精品| 国产精品视频色拍拍| 久久亚洲精品人成综合网| 91无码人妻精品一区二区三区L| 亚洲国产精品无码一线岛国| 国产区精品福利在线观看精品| 囯产精品一品二区三区| 亚洲精品狼友在线播放| 久久国产午夜精品一区二区三区 | 久久99亚洲综合精品首页| 国产午夜精品理论片久久影视| 婷婷五月深深久久精品| 青青草97国产精品免费观看| 国产精品亚洲二区在线观看| 欧美一卡2卡3卡四卡海外精品| avtt天堂网久久精品| 老司机午夜精品视频资源| 一区二区三区精品高清视频免费在线播放 | 亚洲国产一成人久久精品| 日韩精品一区二区三区不卡| 久久精品综合一区二区三区| 国产精品污WWW一区二区三区| 99亚洲精品视频| 亚洲日本精品一区二区| 国产精品视频分类一区| 凹凸国产熟女精品视频app| 精品人妻码一区二区三区| 亚洲中文精品久久久久久不卡| 在线观看自拍少妇精品| 最新精品国偷自产在线| 中文字幕一精品亚洲无线一区| 亚洲精品宾馆在线精品酒店| 亚欧洲精品在线视频免费观看 | 国产精品亚洲美女久久久| 99久久精品九九亚洲精品| 91精品国产高清久久久久久91| 亚洲一二成人精品区| 国产精品V亚洲精品V日韩精品| 99久久国产综合精品五月天喷水| 国产精品自产拍高潮在线观看| 精品无码国产自产拍在线观看蜜|