PHP正則表達式替換實現是如何的呢?首先向你介紹下PHP preg_replace,PHP preg_replace的使用是我們實現的方法,那麼對於PHP正則表達式替換實現過程我們從實例入手。
PHP正則表達式替換的相關概念:
preg_replace:執行正則表達式的搜索和替換
- mixed preg_replace (
- mixed pattern,
- mixed replacement,
- mixed subject [, int limit])
preg_replace:允許你替換字符串中匹配到你定義的正則表達式。一個簡單的注釋移除功能:
- preg_replace('[(/*)+.+(*/)]', '', $val);
這段代碼可以移除在 PHP 和 CSS 中使用 /* 注釋 */ 格式的多多行注釋。其中的三個參數分別為正則表達式,要替換成的字符串和要替換的目標字符串(這裡要做移除功能,所以是個空白字符串 -> '')。如果你想匹配次級規則,可以使用 $0 代表全部匹配,$1、$2 等,以此類推代表分別的次級規則。
在 subject 中搜索 pattern 模式的匹配項並替換為 replacement。如果指定了 limit,則僅替換 limit 個匹配,如果省略 limit 或者其值為 -1,則所有的匹配項都會被替換。
replacement 可以包含 //n 形式或(自 PHP 4.0.4 起)$n 形式的逆向引用,首選使用後者。每個此種引用將被替換為與第 n 個被捕獲的括號內的子模式所匹配的文本。n 可以從 0 到 99,其中 //0 或 $0 指的是被整個模式所匹配的文本。對左圓括號從左到右計數(從 1 開始)以取得子模式的數目。
對替換模式在一個逆向引用後面緊接著一個數字時(即:緊接在一個匹配的模式後面的數字),不能使用熟悉的 //1 符號來表示逆向引用。舉例說 //11,將會使 preg_replace() 搞不清楚是想要一個 //1 的逆向引用後面跟著一個數字 1 還是一個 //11 的逆向引用。本例中的解決方法是使用 /${1}1。這會形成一個隔離的 $1 逆向引用,而使另一個 1 只是單純的文字。
PHP正則表達式替換的相關實例:
例子 1. 逆向引用後面緊接著數字的用法
- <?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() 的每個參數(除了 limit)都可以是一個數組。如果 pattern 和 replacement 都是數組,將以其鍵名在數組中出現的順序來進行處理。這不一定和索引的數字順序相同。如果使用索引來標識哪個 pattern 將被哪個 replacement 來替換,應該在調用 preg_replace() 之前用 ksort() 對數組進行排序。
例子 2. 在 preg_replace() 中使用索引數組
- <?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 是個數組,則會對 subject 中的每個項目執行搜索和替換,並返回一個數組。
如果 pattern 和 replacement 都是數組,則 preg_replace() 會依次從中分別取出值來對 subject 進行搜索和替換。如果 replacement 中的值比 pattern 中的少,則用空字符串作為余下的替換值。如果 pattern 是數組而 replacement 是字符串,則對 pattern 中的每個值都用此字符串作為替換值。反過來則沒有意義了。
/e 修正符使 preg_replace() 將 replacement 參數當作 PHP 代碼(在適當的逆向引用替換完之後)。提示:要確保 replacement 構成一個合法的 PHP 代碼字符串,否則 PHP 會在報告在包含 preg_replace() 的行中出現語法解析錯誤。
例子 3. 替換數個值
- <?php
- $patterns = array
- ("/(19|20)(/d{2})-(/d{1,2})-(/d{1,2})/",
- "/^/s*{(/w+)}/s*=/");
- $replace = array
- ("//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 標記變成大寫,以上的實例運行支持版本為PHP 3>= 3.0.9, PHP 4。
PHP正則表達式替換的相關內容就向你介紹到這裡,希望那個對你了解和掌握PHP正則表達式替換有所幫助。