1. 程式人生 > >php正則表達式基本

php正則表達式基本

you src 單個字符 規則 echo tin 小括號 點號 修飾

一.正則表達式的組成

1.分隔符,可以是除了字母,數字,反斜線及空白以外的任何字符,比如/,!,#,%,|,~等;通常有/,!,~

2.表達式:由一些特殊字符和非特殊字符組成.

3.修飾符:用於開啟或關閉某種功能/模式

二.元字符

常用的元字符有以下幾種

.    匹配除換行符外任何字符
\w    匹配字母或數字或下劃線或漢字
\s    匹配任意空白字符
\d    匹配數字
\b    匹配單詞開始或結束
^    匹配字符串開始
$    匹配字符串結束
-    表示範圍
[]    匹配括號中任意一個字符
* + ?    量詞

三.字符組

如果匹配沒有預定義的元字符,可以使用字符組;只需要在[]內列出他們;
如
[aoeiou]匹配任何一個英文元音字母;
[
.?!] 匹配標點符號 . ? ! ps:盡管[]號內有好多字符,但他只匹配單個字符 四.轉義 如果要匹配元字符本身,比如?,直接匹配,會被當成元字符處理,這時候要使用轉義; \?: \? 就可匹配字符串中含有?的字符串 ps:字符組中的元字符不需要轉義 五.反義 \W 匹配除字母或數字或下劃線或漢字以外 \S 匹配除任意空白字符以外 \D 匹配除數字以外 \B 匹配不是單詞開始或結束的位置 字符組的反義是加^ [^abc] 匹配除了abc這幾個字母以外的任意字符 ps:反義的特征是和一些已知元字符相反,並且為大寫形式.字符組例外 六.分支
| 表示分支 分支就是存在多種可能的匹配情況;如要匹配cat,hat,fat,toat,就可以用分支形式 (c|h|f|to)at ps:匹配分支條件時,從左到右測試每個條件,如果滿足某個分支,就不再考慮其他條件..分組 重復單個字符需要限定符即可做到,重復多個字符就需要分組;分組用小括號指定表達式,然後規定這個表達式重復的次數. 1.捕獲 (exp) 匹配exp,並捕獲文本到自動命名組裏 (?<name>exp) 匹配exp,並捕獲文本到name組裏 (?:exp) 匹配exp,不捕獲,也不分配組號 示例1: <?php
$str = ‘cat‘; preg_match_all(‘/(c).*/‘, $str, $arr); var_dump($arr); 輸出(自動命名組): array(2) { [0]=> array(1) { [0]=> string(3) "cat" } [1]=> array(1) { [0]=> string(1) "c" } } 示例2: <?php $str = ‘cat‘; preg_match_all(‘/(?<name>c).*/‘, $str, $arr); var_dump($arr); 輸出(多出一個test組): array(3) { [0]=> array(1) { [0]=> string(3) "cat" } ["test"]=> array(1) { [0]=> string(1) "c" } [1]=> array(1) { [0]=> string(1) "c" } } 示例3: <?php $str = ‘cat‘; preg_match_all(‘/(?:c).*/‘, $str, $arr); var_dump($arr); 輸出: array(1) { [0]=> array(1) { [0]=> string(3) "cat" } } 2.零寬斷言(匹配的是事實,不是內容) (?=exp) 匹配exp前面的位置 (?<=exp) 匹配exp後面的位置 (?!exp) 匹配後面跟的不是exp的位置 (?<!exp) 匹配前面跟的不是exp的位置 如: <?php $str = ‘testecattest‘; preg_match_all(‘/(?=te)/‘, $str, $arr); 則輸出: array(1) { [0]=> array(3) { [0]=> string(0) "" [1]=> string(0) "" [2]=> string(0) "" } } 匹配到三處 ps:默認情況下,每個分組擁有一個組號,規則是從左到右,以分組的左括號為標誌,第一個出現在分組裏的為1,第二個為2,以此類推;分組0為整個表達式..反向引用 反向引用在於重復搜索前面某個分組匹配的文本. 示例: $str = ‘[url]1.gif[/url]‘; $img = preg_replace(‘/\[url\](\d+\.gif)\[\/url\]/‘, ‘<img src="$1" />‘, $str); echo $img; 輸出 <img src="1.gif" /> $1匹配了分組(\d+\.gif) 九.環視(零寬斷言) 1.順序肯定環視(?=exp) 斷言自身出現位置的後面能匹配表達式exp 示例: <?php $str = ‘what are you doing testing?‘; preg_match_all(‘/\b\w+(?=ing\b)/‘, $str, $arr); var_dump($arr); 匹配do和test 2.逆序肯定環視(?<=exp) 斷言自身出現位置的前面能匹配表達式exp 示例: <?php $str = ‘what are you doing testing?‘; preg_match_all(‘/\b(?=ing)/‘, $str, $arr); var_dump($arr); 匹配doing和testing 3.順序否定環視(?!exp) 4.逆序否定環視(<!exp) 十.常用修飾符/模式 1. i 忽略大小寫 示例: <?php $str = ‘cat test CAT‘; preg_match_all(‘/cat/i‘, $str, $arr); var_dump($arr); 不加i修飾符,只匹配cat 2. m 多行模式 僅當表達式中出現^,$至少一個元字符且有換行符\n時,m修飾符才起作用; 如: $str = ‘cat test cat; 要提取cat a.不用多行模式 preg_match_all(‘/cat.*/‘, $str, $arr); b.用多行模式 preg_match_all(‘/cat.*$/m‘, $str, $arr); 3.s 點號統配模式(.號可以匹配換行符) 如: <?php $str = ‘cat t test cat f; preg_match_all(‘/t.*f/s‘, $str, $arr); var_dump($arr); 輸出: array(1) { [0]=> array(1) { [0]=> string(19) "t t test cat f" } } 4.U 懶惰模式 等效於懶惰匹配 5.D 結尾限制 等效於結尾限定符 6.u 啟用pcre中與perl不兼容的功能,模式字符串被當成utf-8

php正則表達式基本