基本語法
界定符:
標識一個正規表示式的開始和結束,用'/'或'#'或'{ }',因為語法'{ }'也可能是正規表示式的運算符,為了避免混淆,所以不建議使用。建議的用法如下:
Copy$pattern = '/[0-9]/'; //我喜欢这个,看起来比较简洁 $pattern = '#[0-9]#';
原子:
#可見原子:Unicode編碼表中可用鍵盤輸出後肉眼可見的字符,例如:標點; . / ? 或英文字母,漢字等等可見字符
不可見原子:Unicode編碼表中可用鍵盤輸出後肉眼不可見的字符,例如:換行符\n,Tab製表符\t, 空格等等,
一般只用這三個(換行符一般和其他字元一起匹配,因為只有換行符是匹配不到的)
小提示:匹配運算符前面需要加'\' 例如:' ' 號,匹配的話需要寫出'\ '
元字元
原子的篩選方式:
| 匹配兩個或多個分支選擇
[] 匹配方括號中的任一個原子
[^] 匹配除方括號中的原子之外的任意字元;
範例:Duang|duang 或[Dd ]uang 都可以匹配到Duang和duang
區間寫法:[a-z]匹配a到z的字元, [0-9]匹配0到9的字元。也可以[a-z0-9]
. 匹配除換行符之外的任意字元
\d 匹配任一個十進制數字,即{0-9]
\D 匹配任一個非十進制數字[^0-9] 相當於[^\d]
\s 符合一個不可見的原子,即[\f\n\r\t\v]
\S 符合一個可見的原子,即[\f\n\r\t\v],相當於[\s]z
\w 符合任一個數字、字母或底線,即[0-9a-zA-Z_]
\W 匹配任一非數字、字母或底線,[0-9a-zA-Z_],相當於[\w]
量詞
{n} 表示前面的原子剛好出現了n次。
[n] 表示其前面的原子最少出現n次
{n,m} 最少出現n次,最多出現m次
* 匹配0次、一次或多次,即{0,}
符合一次或多次,即{1,}
? 符合0或1次,即{0,1}
##邊界控制
^ 匹配字串開始的位置$ 匹配字串結尾的位置
例:^John 可以匹配到:John 但是匹配不到:123John,因為規定了字串以John開頭
模式單元
() 符合其中的整體為一個原子, 如: (X|x)iaomi , 可以配對到xiaomi#修正模式
貪婪比對
存在歧義時取其長(預設)
#懶惰符合
符合結果存在歧義時取其短,只需在正規表示式的後面'/'加上'U',例如'/[0-9]/U';範例:
Copy$subject = "test__123123123"; preg_match('/test.+123/', $subject, $matches); //贪婪模式 var_dump($matches); preg_match('/test.+123/U', $subject, $matches); //懒惰模式var_dump($matches);常見的修正模式:
U 懶惰符合
i 忽略英文字母的大小寫x 忽略正規表示式的空白符
s 讓元字元'.' 匹配包括換行符在內的所有字元preg_match
##執行匹配正規表示式preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] ) : intpattern: 要搜尋的模式,字串型別。 subject:輸入字串。 match: 如果提供了參數matches,它將被填入搜尋結果,資料結構為一維數組。 flags: 可以設定為PREG_OFFSET_CAPTURE,使用搜尋結果的第0個元素為匹配的字串,第1個元素為對應的偏移量(位置)offset: 搜尋從目標字串的起始位置開始匹配。
傳回值:符合次數
類似函數preg_match_all,參數與preg_match一致
preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] ) : mixed###pattern:要搜尋的模式。可以是一個字串或字串數組。 replacement:用於替換的字串或字串陣列subject:要進行搜尋和替換的字串或字串陣列。 limit:替換的最大次數。預設是 -1(無限)。 count:替換次數。 ###類似函數preg_filter,參數與preg_replace一致###區別(使用數組進行匹配的時候才看得出區別):preg_replace:不管是否有替換,返回全部結果preg_filter:只返回匹配的結果。 ######preg_split######透過一個正規表示式分隔字串###
preg_split ( string $pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]] ) : array
$pattrn:用于搜索的模式,字符串形式。subject:输入字符串limit:将限制分隔得到的子串最多只有limit个,返回的最后一个 子串将包含所有剩余部分。flags:有以下标记的组合:
-- 1. PREG_SPLIT_NO_EMPTY: 返回分隔后的非空部分。
-- 2. PREG_SPLIT_DELIM_CAPTURE: 用分隔符'()'括号把匹配的捕获并返回。
-- 3. PREG_SPLIT_OFFSET_CAPTURE: 匹配返回时将会附加字符串偏移量
PREG_SPLIT_DELIM_CAPTURE这个参数可能比较难明白,举个例子看看:
Copy$subject = "1a23b"; $a = preg_split('/[\d]/', $subject, -1, PREG_SPLIT_NO_EMPTY); var_dump($a); $a = preg_split('/([\d])/', $subject, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); var_dump($a);
输出如下:
array (size=2)
0 => string 'a' (length=1)
1 => string 'b' (length=1)
array (size=5)
0 => string '1' (length=1)
1 => string 'a' (length=1)
2 => string '2' (length=1)
3 => string '3' (length=1)
4 => string 'b' (length=1)
preg_grep
返回匹配模式的数组条目
preg_grep ( string $pattern , array $input [, int $flags = 0 ] ) : array
$pattern:要搜索的模式,字符串形式$input:输入数组flags:如果不设置则返回匹配的数目,设置PREG_GREP_INVERT则返回不匹配的数目。
preg_quote
转义正则表达式字符,返回为转义后的字符串
preg_quote ( string $str [, string $delimiter = NULL ] ) : string
str:输入字符串delimiter:需要转义的字符串
以上是常用的php正規表示及文法註解總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!