以前做一個項目,就是有一個問答的頁面,比如說在回答或者提問的內容中插入表情。寫到內容裡的是表情圖片的名字(而且是不帶後綴的,比如:f_002.png)表情包放在項目裡,我需要在取除內容的時候將裡面的表情名字替換成圖片。
存到數據庫中的內容是這樣的: 不知道[f_013] (最後面的這個[f_013]就是表情圖在數據庫中存放的形式)
我需要做的就是從數據庫中取出內容,並且把內容中的像這樣的字符 [f_013] 處理成圖片地址,很顯然這裡需要用到正則表達式。
1.首先我得先找到這個字符串
$rule = "/(?:\[)(f_.[0-9]{1,3})(?:\])/i";
這個正則匹配可以幫我找到表情的字符串
2.找到後就是把這個字符串換成表情圖片存放的地址,這裡用到了一個函數就是正則表達式的替換。
就是這個函數:preg_match_all
echo preg_replace("/(?:\[)(f_.[0-9]{1,3})(?:\])/i","<img src='__PUBLIC__/face/\${1}.png'>",$line['content']);
$line['content'] 這個是我從數據庫中取出的內容,
"<img src='__PUBLIC__/face/\${1}.png'>" 這個是我將要替換的圖片地址,比如我的圖片地址是這樣的<img src="__PUBLIC__/face/f_013.png">
這裡面有一個非常重要的知識點: "\${1}" 它就是那個存放在數據庫裡面表情的字符串。
\${1} = f_013
我這裡有我替換的一個完整代碼:
<?php
$result = array(); $n = preg_match_all("/(?:\[)(f_.[0-9]{1,3})(?:\])/i",$line['content'], $result); /*返回查找到符合條件的字符串的個數*/ 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']); } ?>