preg_replace
說明
preg_replace (
PHP3 >= 3.0.9, PHP 4, PHP 5)
preg_replace -- 執行
正則表達式的搜尋和替換
具體內容
mixed preg_replace( mixed pattern, mixed replacement, mixed subject [, int limit] )
在 subject 中搜尋 pattern 模式的匹配項並替換為 replacement。如果指定了 limit,則僅替換 limit 個匹配,如果省略 limit 或者其值為 -1,則所有的匹配項都會被替換。
replacement 可以包含 \\n 形式或(自 PHP 4.0.4 起)$n 形式的逆向引用,首選使用後者。每個此種引用將被替換為與第 n 個被捕獲的括弧內的子模式所匹配的文本。n 可以從 0 到 99,其中 \\0 或 $0 指的是被整個模式所匹配的文本。對左圓括弧從左到右計數(從 1 開始)以取得子模式的數目。 如果要在
replacement 中使用反斜線, 必須使用4個(
"\\\\", 譯註: 因為這首先是
php的字元串, 經過轉義後, 是兩個, 再經過
正則表達式引擎後才被認為是一個原文反斜線)。
對替換模式在一個逆向引用後面緊接著一個數字時(即:緊接在一個匹配的模式後面的數字),不能使用熟悉的 \\1 符號來表示逆向引用。舉例說 \\11,將會使 preg_replace()搞不清楚是想要一個 \\1 的逆向引用後面跟著一個數字 1 還是一個 \\11 的逆向引用。本例中的解決方法是使用 \${1}1。這會形成一個隔離的 $1 逆向引用,而使另一個 1 只是單純的文字。
例子
例1 替換數個值
<?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"); ?> |
本例將輸出:
例2 逆向引用
逆向引用後面緊接著數字的用法 <?php
$string = "April 15, 2003";
$pattern = "/(\w+) (\d+), (\d+)/i";