php+ksort+返回true,PHP preg_replace函数
mixed preg_replace( mixed pattern, mixed replacement, mixed subject [, int limit] )
在PHP中用來執行正則表達式的匹配以及替換的函數。可以返回一個正則表達式轉換后的值。
在subject中搜索pattern模式的匹配項,并用replacement模式進行替換。如果指定了 limit,則僅替換limit個匹配,如果省略limit或者其值為 -1,則所有的匹配項都會被替換。
參數
pattern
要搜索的模式。可以使一個字符串或字符串數組。
可以使用一些PCRE修飾符,包括被棄用的’e'(PREG_REPLACE_EVAL),可以為這個函數指定。
replacement
用于替換的字符串或字符串數組。如果這個參數是一個字符串,并且pattern是一個數組,那么所有的模式都使用這個字符串進行替換。如果pattern和replacement都是數組,每個pattern使用replacement中對應的元素進行替換。如果replacement中的元素比pattern中的少,多出來的pattern使用空字符串進行替換。
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。
當使用被棄用的 e 修飾符時, 這個函數會轉義一些字符(即:’、”、\ 和 NULL) 然后進行后向引用替換。當這些完成后請確保后向引用解析完后沒有單引號或雙引號引起的語法錯誤(比如: ‘strlen(\’$1′)+strlen(“$2″)’)。確保符合PHP的字符串語法,并且符合eval語法。因為在完成替換后,引擎會將結果字符串作為php代碼使用eval方式進行評估并將返回值作為最終參與替換的字符串。
subject
要進行搜索和替換的字符串或字符串數組。
如果subject是一個數組,搜索和替換回在subject的每一個元素上進行, 并且返回值也會是一個數組。
limit
每個模式在每個subject上進行替換的最大次數。默認是-1(無限)。
count
如果指定,將會被填充為完成的替換次數。
返回值
如果subject是一個數組, preg_replace()返回一個數組, 其他情況下返回一個字符串。
如果匹配被查找到,替換后的subject被返回,其他情況下 返回沒有改變的subject。如果發生錯誤,返回 NULL 。
范例
#1 使用后向引用緊跟數值原文
$string = 'April 15, 2003';
$pattern = '/(\w+) (\d+), (\d+)/i';
$replacement = '${1}1,$3';
echo preg_replace($pattern, $replacement, $string);
?>
0
1
2
3
4
5
$string='April 15, 2003';
$pattern='/(\w+) (\d+), (\d+)/i';
$replacement='${1}1,$3';
echopreg_replace($pattern,$replacement,$string);
?>
以上例程會輸出:April1,2003
#2 preg_replace()中使用基于索引的數組
$string = 'The quick brown fox jumped over the lazy dog.';
$patterns = array();
$patterns[0] = '/quick/';
$patterns[1] = '/brown/';
$patterns[2] = '/fox/';
$replacements = array();
$replacements[2] = 'bear';
$replacements[1] = 'black';
$replacements[0] = 'slow';
echo preg_replace($patterns, $replacements, $string);
?>
0
1
2
3
4
5
6
7
8
9
10
11
$string='The quick brown fox jumped over the lazy dog.';
$patterns=array();
$patterns[0]='/quick/';
$patterns[1]='/brown/';
$patterns[2]='/fox/';
$replacements=array();
$replacements[2]='bear';
$replacements[1]='black';
$replacements[0]='slow';
echopreg_replace($patterns,$replacements,$string);
?>
以上例程會輸出:The bear black slow jumped over the lazy dog.
對模式和替換內容按key進行排序我們可以得到期望的結果。
ksort($patterns);
ksort($replacements);
echo preg_replace($patterns, $replacements, $string);
?>
0
1
2
3
4
ksort($patterns);
ksort($replacements);
echopreg_replace($patterns,$replacements,$string);
?>
以上例程會輸出:The slow black bear jumped over the lazy dog.
#3 替換一些值
$patterns = array ('/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/',
'/^\s*{(\w+)}\s*=/');
$replace = array ('\3/\4/\1\2', '$\1 =');
echo preg_replace($patterns, $replace, '{startDate} = 1999-5-27');
?>
0
1
2
3
4
5
$patterns=array('/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/',
'/^\s*{(\w+)}\s*=/');
$replace=array('\3/\4/\1\2','$\1 =');
echopreg_replace($patterns,$replace,'{startDate} = 1999-5-27');
?>
以上例程會輸出:$startDate = 5/27/1999
#4 剝離空白字符
$str = 'foo?? o';
$str = preg_replace('/\s\s+/', ' ', $str);
// 將會改變為'foo o'
echo $str;
?>
0
1
2
3
4
5
$str='foo?? o';
$str=preg_replace('/\s\s+/',' ',$str);
// 將會改變為'foo o'
echo$str;
?>
#5 使用參數count
$count = 0;
echo preg_replace(array('/\d/', '/\s/'), '*', 'xp 4 to', -1 , $count);
echo $count; //3
?>
0
1
2
3
4
$count=0;
echopreg_replace(array('/\d/','/\s/'),'*','xp 4 to',-1,$count);
echo$count;//3
?>
以上例程會輸出:
xp***to
3
Note
當使用數組形式的pattern和replacement時, 將會按照key在數組中出現的順序進行處理. 這不一定和數組的索引順序一致. 如果你期望使用索引對等方式用replacement對pattern進行替換, 你可以在調用preg_replace()之前對兩個數組各進行一次ksort()排序.
總結
以上是生活随笔為你收集整理的php+ksort+返回true,PHP preg_replace函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 断情绝爱的网名100个
- 下一篇: xshell调出oracle安装界面,X