. 除換行符之外的全部字符 \. 轉義字符(另有\*, \(, \\, 等等.) ^ 字符串開頭 $ 字符串結尾 \d,\w,\s 一個數字, 字符 [A-Za-z0-9_], 空格. \D,\W,\S 一個非數字, 非字符 [A-Za-z0-9_], 非空格. [abc] a,b或c中的一個. [a-z] a到z中的一個字母. [^abc] 除a,b或c的一個字符. aa|bb aa或者bb. ? 0次或1次匹配. * 任意次數匹配. + 一次或一次以上匹配. {n} n次精確匹配. {n,} n次或n次以上匹配. {m,n} 最少m次,最多n次匹配. ??,*?,+?,{n}?, etc. 同上,但儘量少次數的匹配. (expr) 捕獲 expr 子模式,以 \1使用它, 等等. (?:expr) 忽略捕獲的子模式. (?=expr) 正向預查模式 expr. (?!expr) 負向預查模式 expr.
//執行一個正則表達式的匹配 preg_match(string $pattern , string $subject[,array $matches]) //執行一個全局正則表達式匹配 preg_match_all(string $pattern , string $subject[,array $matches])
preg_match()
返回 $pattern
的匹配次數0或1次,由於匹配到第一個後就會中止搜索,而 preg_match_all()
將會一直搜索 $subject
到結尾php
<?php $pattern='/[0-9]/'; $object='werdf43ofd9as2noi4'; $m1=$m2=array(); preg_match($pattern,$object,$m1); preg_match_all($pattern,$object,$m2); var_dump($m1); var_dump($m2); //結果: Array ( [0] => 4 ) Array ( [0] => Array ( [0] => 4 [1] => 3 [2] => 9 [3] => 2 [4] => 4 ) )
//只返回通過正則匹配的結果 preg_fiflter(mixed $pattern , mixed $replacement , mixed $subject) //放回全部結果 preg_replace(mixed $pattern , mixed $replacement , mixed $subject)
$subject = array('1', 'a', '2', 'b', '3', 'A', 'B', '4'); $pattern = array('/\d/', '/[a-z]/', '/[1a]/'); $replace = array('A:$0', 'B:$0', 'C:$0'); echo "preg_filter returns\n"; print_r(preg_filter($pattern, $replace, $subject)); echo "preg_replace returns\n"; print_r(preg_replace($pattern, $replace, $subject)); //結果: preg_filter returns Array ( [0] => A:C:1 [1] => B:C:a [2] => A:2 [3] => B:b [4] => A:3 [7] => A:4 ) preg_replace returns Array ( [0] => A:C:1 [1] => B:C:a [2] => A:2 [3] => B:b [4] => A:3 [5] => A [6] => B [7] => A:4 )
preg_quote(string $pattern) — 轉義正則表達式字符,有時候匹配字符中包含正則表達式語法,須要進行轉義才能進行匹配
正則表達式特殊字符有: . + * ? [ ^ ] $ ( ) { } = ! < > | : -正則表達式
preg_split(string $pattern , string $subject) — 經過一個正則表達式分隔字符串,相似於explode函數數組
preg_grep — 返回匹配模式的數組條目函數
$array = array("23.32","22","12.009","23.43.43"); print_r(preg_grep("/^(\d+)?\.\d+$/",$array)); //結果: Array ( [0] => 23.32 [2] => 12.009 )
preg_replace_callback — 執行一個正則表達式搜索而且使用一個回調進行替換工具
<?php // 將文本中的年份增長一年. $text = "April fools day is 04/01/2002\n"; $text.= "Last christmas was 12/24/2001\n"; // 回調函數 function next_year($matches) { // 一般: $matches[0]是完成的匹配 // $matches[1]是第一個捕獲子組的匹配 // 以此類推 return $matches[1].($matches[2]+1); } echo preg_replace_callback( "|(\d{2}/\d{2}/)(\d{4})|", "next_year", $text); ?> //結果 April fools day is 04/01/2003 Last christmas was 12/24/2002