PHP正則表達式替換函數preg_replace

preg_replace正則表達式替換函數對於我來講,如今很是喜歡它。不只能準確、快速的處理字符串,還能讓我重新審視正則表達式的重要性。正則表達式語言對於我來講,就像人類聽不懂鳥語同樣,想懂它卻那麼難以交流,看來是要好好的學習學習正則表達式語法啦。這裏有30分鐘正則表達式入門教程,多麼想和他熟悉熟悉,懂他能給工做帶來很大的方便,因此拿下正則表達式是迫在眉睫的事情。 css

preg_replace — 執行一個正則表達式的搜索和替換
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

說明:搜索subject中匹配pattern的部分, 以replacement進行替換。 html

preg_replace參數補充說明:

一、replacement 能夠包含 \\n 形式或 $n 形式的逆向引用,首選使用後者。每一個此種引用將被替換爲與第 n 個被捕獲的括號內的子模式所匹配的文本。n 能夠從 0 到 99,其中 \\0 或 $0 指的是被整個模式所匹配的文本。對左圓括號從左到右計數(從 1 開始)以取得子模式的數目。 程序員

二、對替換模式在一個逆向引用後面緊接着一個數字時(如 \\11),不能使用 \\ 符號來表示逆向引用。由於這樣將會使 preg_replace() 搞不清楚是想要一個 \\1 的逆向引用後面跟着一個數字 1 仍是一個 \\11 的逆向引用。解決方法是使用 \${1}1。這會造成一個隔離的 $1 逆向引用,而使另外一個 1 只是單純的文字。 正則表達式

三、上述參數除 limit 外均可以是一個數組。若是 pattern 和 replacement 都是數組,將以其鍵名在數組中出現的順序來進行處理,這不必定和索引的數字順序相同。若是使用索引來標識哪一個 pattern 將被哪一個 replacement 來替換,應該在調用 preg_replace() 以前用 ksort() 函數對數組進行排序。 數組

下面列舉一些preg_replace的例子:
echo preg_replace("/[0-9]/","",$str);//去掉全部數字  
echo preg_replace("/[a-z]/","",$str); //這樣是去掉全部小寫字母  
echo preg_replace("/[A-Z]/","",$str); //這樣是去掉全部大寫字母  
echo preg_replace("/[a-z,A-Z]/","",$str); //這樣是去掉全部字母

注:開頭結尾出現斜槓(/),是告訴解析器雙斜槓裏面的內容即爲正則表達式,也是聲明正則表達式的標誌,就像聲明PHP變量用$同樣。一對中括號([ ])裏的內容,便是要查找替換的內容。 網絡

網絡茶館向我提了一個正則表達式的問題,解決辦法以下: 函數

//需求:去掉[url][/url]之間內容
$content = "今天是2013年01月02號[url=http:/./tech.42xiu.com]複製連接[/url]是新年的次日。";
echo preg_replace("/\[url.*\[\/url\]/", "", $content); //結果:今天是2013年01月02號是新年的次日。

注:本例中左中括號和右中括號,是要匹配的一部分,因此須要反斜槓(\)來轉義[和],(何爲轉義:失去它原來的意義,元素不在特殊) 學習

preg_replace高深之處在於,能夠解析自定義的html寫法,舉個例子: this

$template = preg_replace("/[\n\r\t]*\{css\s+(.+?)\}[\n\r\t]*/ies", "\$this->cssTags('\\1')", $template);

$template = preg_replace("/[\n\r\t]*\{script\s+(.+?)\}[\n\r\t]*/ies", "\$this->scriptTags('\\1')", $template);

$template = preg_replace("/\{lang\s+(.+?)\}/ies", "\$this->languageVar('\\1')", $template);

//以上正則替換,都是爲了解析html模版中出現的{css ****}、{script *****}、{lang ****}等語法,這樣本身能夠寫一套模版引擎之類的,很好的作到html與腳本分離。

其實,最最最重要的,仍是要學會如何使用正則表達式,只有熟練的使用正則表達式,這些像preg_replace的函數用起來才能遊刃有餘,你說呢?因此正則表達式對於程序員來講,是必經之路啊。 url

本文由PHP樂知博客提供 http://tech.42xiu.com

相關文章
相關標籤/搜索