国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Regex > 正文

正則表達式、分組、子匹配(子模式)、非捕獲子匹配(子模式)

2020-03-22 17:49:07
字體:
來源:轉載
供稿:網友
PHP html' target='_blank'>正則表達式、分組、子匹配(子模式)、非捕獲子匹配(子模式)
前面我們知道正則表達式有很多元字符表示匹配次數(量詞),都是可以重復匹配前面出現的單個字符次數。有時候,我們可能需要匹配一組多個字符一起出現的次數。這個時候,我們需要分組了。就是用小括號來括起這些字符,指定子表達式(也叫做分組)。然后你就可以指定這個子表達式的重復次數了,你也可以對子表達式進行其它一些操作。這個時候,可以把括號中一組字符,看作一個整體了。分組模式舉例說明如:查找字符串中,連續出現多個win字符串的字符。可以這樣完 php $str = "this is win winwindows!";preg_match_all("/(win)+/",$str,$marr);var_dump($marr);不用分組模式,同時匹配多個字符,可以嗎? 我們發現以前操作符號:[win]+,盡管可以匹配到winwin字符,因為它代表是有w,i,n組合的一個或者多個字符,不會限制順序。所見它會匹配到象:wwin,www,inw等等,只要是這3個字符組成的,多個字符都匹配成功了。上面怎么匹配到,每一個有2個結果呢?這就是子模式(子匹配),默認除了可以將多個字符組合一個整體,另外還會把括號,括起來的這部分表達式存儲到一個臨時緩沖區中,以便后面正則表達式調用。上面這個例子里面,我們不需要,后期調用的。因此,怎么樣屏蔽掉這個子表達式捕獲內容呢? 只需要在:前加上” :” 即可。我們看看下面例子正則表達式 分組非捕獲模式。非捕獲模式優點有哪些呢? 從上面看,可以減少捕獲,也就會減少匹配次數。因此,在不必要分組表達式加入非捕獲前綴” :”,可以節省內存開銷,并且可以提升匹配速度!剛剛說到了正則表達式分組,默認情況會將子表達式捕獲內容,存儲到一個緩存區。以便后續調用。 那這個是什么樣情況呢?其實,這個是正則表達式的引用。所捕獲的每個子匹配都按照在正則表達式模式中從左至右所遇到的內容按順序存儲。存儲子匹配的緩沖區編號從1開始,最多可以一般存儲為9。以便后面表達式引用該值,又叫后向引用。我們看下下面例子,查找一個字符串中,互不相鄰,出現多次系統單詞:add。$str = "add123456addasdf"; preg_match_all('/(add)/d+/1/',$str,$marr); var_dump($marr);反向引用,常用來處理一些處理一些特殊匹配情況。如:查找字符串中,不相鄰重復字符串。查找html一對標簽中內容。特別分析html非常常見了(注意,如果使用了反向引用,前面不能屏蔽子匹配捕獲,也就是不能加” :"前綴了)。經常會用:$str = file_get_contents('http://blog.chacuo.net/');preg_match_all('/ (/S+)[^ ]* [^ ]* ///1 /',$str,$marr);var_dump($marr);// (/S+) 表示非顯示字符之外所有字符,一般作為html tag名稱// tag格式一般為 tag 其它屬性 后面[^ ]* 匹配tag里面所有其它屬性// 后面的[^ ]* 表示 tag... 中間內容 /tag 表示中間內容,到" "結束,因此匹配所有[^ ]* 字符// 最后的 ///1 "http://" 轉義"/"字符,后面的"/1" 表示反向應用前面的(/S+)以上是正則表達式使用比較重要的,分組,反向匹配,以及非捕獲分組說明及實例。希望對要屬性改功能朋友有所幫助。同時歡迎朋友們交流!PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 定日县| 海伦市| 苏尼特左旗| 岳阳市| 灵武市| 永善县| 福州市| 泌阳县| 莒南县| 木兰县| 长丰县| 东安县| 安达市| 芮城县| 天津市| 嘉峪关市| 乌兰浩特市| 江华| 丰都县| 昔阳县| 武城县| 韶关市| 太白县| 松桃| 石台县| 习水县| 衡阳县| 富顺县| 康定县| 遵义县| 潮州市| 朝阳县| 灵丘县| 鹿泉市| 阜康市| 永新县| 铜梁县| 封开县| 昌乐县| 庆云县| 玉林市|