標籤:str cat blog 忽略 span 存在 echo 漢字 測試
一.Regex的組成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)atps:匹配分支條件時,從左至右測試每個條件,如果滿足某個分支,就不再考慮其他條件.七.分組重複單個字元需要限定符即可做到,重複多個字元就需要分組;分組用小括弧指定運算式,然後規定這個運算式重複的次數.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和test2.逆序肯定環視(?<=exp)斷言自身出現位置的前面能匹配運算式exp樣本:<?php$str = ‘what are you doing testing?‘;preg_match_all(‘/\b(?=ing)/‘, $str, $arr);var_dump($arr);匹配doing和testing3.順序否定環視(?!exp)4.逆序否定環視(<!exp)十.常用修飾符/模式1. i 忽略大小寫樣本:<?php$str = ‘cat test CAT‘;preg_match_all(‘/cat/i‘, $str, $arr);var_dump($arr);不加i修飾符,只匹配cat2. m 多行模式僅當運算式中出現^,$至少一個元字元且有分行符號\n時,m修飾符才起作用;如:$str = ‘cat testcat‘;要提取cata.不用多行模式preg_match_all(‘/cat.*/‘, $str, $arr);b.用多行模式preg_match_all(‘/cat.*$/m‘, $str, $arr);3.s 點號統配模式(.號可以匹配分行符號)如:<?php$str = ‘cat ttestcatf‘;preg_match_all(‘/t.*f/s‘, $str, $arr);var_dump($arr);輸出:array(1) { [0]=> array(1) { [0]=> string(19) "t ttestcatf" }}4.U 懶惰模式等效於懶惰匹配5.D 結尾限制等效於結尾限定符6.u 啟用pcre中與perl不相容的功能,模式字串被當成utf-8
phpRegex基本