詳解PHP正則表達(dá)式替換實現(xiàn)(PHP preg_replace,PHP preg_replace)
PHP正則表達(dá)式替換實現(xiàn)是如何的呢?首先向你介紹下PHP preg_replace,PHP preg_replace的使用是我們實現(xiàn)的方法,那么對于PHP正則表達(dá)式替換實現(xiàn)過程我們從實例入手。
PHP正則表達(dá)式替換的相關(guān)概念:
preg_replace:執(zhí)行正則表達(dá)式的搜索和替換
mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit])
preg_replace:允許你替換字符串中匹配到你定義的正則表達(dá)式。
一個簡單的注釋移除功能:
preg_replace('[(/*)+.+(*/)]', '', $val);
這段代碼可以移除在 PHP 和 CSS 中使用 /* 注釋 */ 格式的多多行注釋。其中的三個參數(shù)分別為正則表達(dá)式,要替換成的字符串和要替換的目標(biāo)字符串(這里要做移除功能,所以是個空白字符串 -> '')。如果你想匹配次級規(guī)則,可以使用 $0 代表全部匹配,$1、$2 等,以此類推代表分別的次級規(guī)則。
在 subject 中搜索 pattern 模式的匹配項并替換為 replacement。如果指定了 limit,則僅替換 limit 個匹配,如果省略 limit 或者其值為 -1,則所有的匹配項都會被替換。
replacement 可以包含 //n 形式或(自 PHP 4.0.4 起)$n 形式的逆向引用,首選使用后者。每個此種引用將被替換為與第 n 個被捕獲的括號內(nèi)的子模式所匹配的文本。n 可以從 0 到 99,其中 //0 或 $0 指的是被整個模式所匹配的文本。對左圓括號從左到右計數(shù)(從 1 開始)以取得子模式的數(shù)目。
對替換模式在一個逆向引用后面緊接著一個數(shù)字時(即:緊接在一個匹配的模式后面的數(shù)字),不能使用熟悉的 //1 符號來表示逆向引用。舉例說 //11,將會使 preg_replace() 搞不清楚是想要一個 //1 的逆向引用后面跟著一個數(shù)字 1 還是一個 //11 的逆向引用。本例中的解決方法是使用 /${1}1。這會形成一個隔離的 $1 逆向引用,而使另一個 1 只是單純的文字。
PHP正則表達(dá)式替換的相關(guān)實例:
例子 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 */ ?>
如果搜索到匹配項,則會返回被替換后的 subject,否則返回原來不變的 subject。
preg_replace() 的每個參數(shù)(除了 limit)都可以是一個數(shù)組。如果 pattern 和 replacement 都是數(shù)組,將以其鍵名在數(shù)組中出現(xiàn)的順序來進行處理。這不一定和索引的數(shù)字順序相同。如果使用索引來標(biāo)識哪個 pattern 將被哪個 replacement 來替換,應(yīng)該在調(diào)用 preg_replace() 之前用 ksort() 對數(shù)組進行排序。
例子 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 是個數(shù)組,則會對 subject 中的每個項目執(zhí)行搜索和替換,并返回一個數(shù)組。
如果 pattern 和 replacement 都是數(shù)組,則 preg_replace() 會依次從中分別取出值來對 subject 進行搜索和替換。如果 replacement 中的值比 pattern 中的少,則用空字符串作為余下的替換值。如果 pattern 是數(shù)組而 replacement 是字符串,則對 pattern 中的每個值都用此字符串作為替換值。反過來則沒有意義了。
/e 修正符使 preg_replace() 將 replacement 參數(shù)當(dāng)作 PHP 代碼(在適當(dāng)?shù)哪嫦蛞锰鎿Q完之后)。提示:要確保 replacement 構(gòu)成一個合法的 PHP 代碼字符串,否則 PHP 會在報告在包含 preg_replace() 的行中出現(xiàn)語法解析錯誤。
例子 3. 替換數(shù)個值
<?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)記變成大寫,以上的實例運行支持版本為PHP 3>= 3.0.9, PHP 4。
PHP正則表達(dá)式替換的相關(guān)內(nèi)容就向你介紹到這里,希望那個對你了解和掌握PHP正則表達(dá)式替換有所幫助。
用正則表達(dá)式替換內(nèi)容 php
以前做一個項目,就是有一個問答的頁面,比如說在回答或者提問的內(nèi)容中插入表情。寫到內(nèi)容里的是表情圖片的名字(而且是不帶后綴的,比如:f_002.png)表情包放在項目里,我需要在取除內(nèi)容的時候?qū)⒗锩娴谋砬槊痔鎿Q成圖片。
存到數(shù)據(jù)庫中的內(nèi)容是這樣的: 不知道[f_013] (最后面的這個[f_013]就是表情圖在數(shù)據(jù)庫中存放的形式)
我需要做的就是從數(shù)據(jù)庫中取出內(nèi)容,并且把內(nèi)容中的像這樣的字符 [f_013] 處理成圖片地址,很顯然這里需要用到正則表達(dá)式。
1.首先我得先找到這個字符串
$rule = "/(?:\[)(f_.[0-9]{1,3})(?:\])/i";
這個正則匹配可以幫我找到表情的字符串
2.找到后就是把這個字符串換成表情圖片存放的地址,這里用到了一個函數(shù)就是正則表達(dá)式的替換。
就是這個函數(shù):preg_match_all
echo preg_replace("/(?:\[)(f_.[0-9]{1,3})(?:\])/i","<img src='__PUBLIC__/face/\${1}.png'>",$line['content']);
$line['content'] 這個是我從數(shù)據(jù)庫中取出的內(nèi)容,
"<img src='__PUBLIC__/face/\${1}.png'>" 這個是我將要替換的圖片地址,比如我的圖片地址是這樣的<img src="__PUBLIC__/face/f_013.png">
這里面有一個非常重要的知識點: "\${1}" 它就是那個存放在數(shù)據(jù)庫里面表情的字符串。
\${1} = f_013
我這里有我替換的一個完整代碼:
<?php $result = array(); $n = preg_match_all("/(?:\[)(f_.[0-9]{1,3})(?:\])/i",$line['content'], $result); /*返回查找到符合條件的字符串的個數(shù)*/ if($n == 0 || $n == false) /*如果是0或者false就說明沒有表情*/ { echo $line['content']; }else { echo preg_replace("/(?:\[)(f_.[0-9]{1,3})(?:\])/i","<img src='__PUBLIC__/face/\${1}.png'>",$line['content']); } ?>
- PHP preg_replace() 正則替換所有符合條件的字符串
- PHP 字符串正則替換函數(shù)preg_replace使用說明
- PHP正則替換函數(shù)preg_replace和preg_replace_callback使用總結(jié)
- php正則之函數(shù) preg_replace()參數(shù)說明
- php中preg_replace正則替換用法分析【一次替換多個值】
- php preg_replace替換實例講解
- PHP 正則表達(dá)式之正則處理函數(shù)小結(jié)(preg_match,preg_match_all,preg_replace,preg_split)
- php中preg_replace_callback函數(shù)簡單用法示例
- php中使用preg_replace函數(shù)匹配圖片并加上鏈接的方法
- 深入研究PHP中的preg_replace和代碼執(zhí)行
相關(guān)文章
正則表達(dá)式替換table表格中的樣式與空標(biāo)記(保留rowspan與colspan)
最近幾天的勞動成果,用正則表達(dá)式去除表格中的樣式與class方便后臺編輯的操作,在編寫過程中不斷進步,后續(xù)將不定時更新,需要的朋友可以參考下2020-04-04JavaScript正則表達(dá)式驗證身份證號碼是否合法(兩種方法)
正則表達(dá)式(regular expression)是一個描述字符模式的對象。下面通過本篇文章給大家介紹js正則表達(dá)式驗證身份證號碼是否合法,需要的朋友可以參考下本篇文章2015-09-09