正規表示式的分組和反向引用

2021-06-20 02:18:36 字數 1120 閱讀 5504

一、分組

所謂分組就是為了實現多個字元繫結在一起而加括號把這一組字元限定為乙個整體。比如我們要表達0個或者多個a那麼可以直接a*而如果表達0ge或者多個ab那麼就用括號把ab括起來(ab)*,這個時候ab就是乙個分組。

分組常用的的語法有:

(exp):匹配exp,並且捕獲文字到自動命名的組裡。

這裡這個自動命名要理解一下,就是乙個正規表示式裡如果有多個組,如果你沒有給組新增自己的名字,那麼正規表示式會自動給這幾個組從左到右自動命名,從左到右依次是1到9。

如果你手動給組命名,那麼正規表示式會從左到右掃瞄2遍,先掃瞄自動命名再掃瞄手動命名。

<?php

preg_match('/(ab)*/', 'ababddd', $matches);

print_r($matches);

(?exp):匹配exp,並且捕獲文字到name的組裡,也可以寫成(?'name'exp)

<?php

preg_match('/(?ab)*/', 'ababddd', $matches);

print_r($matches);

(?:exp):匹配exp,不捕獲匹配的文字,也不給此分組分配組號。(這個平時用到的比較多)

<?php

preg_match('/(?:ab)*/', 'ababddd', $matches);

print_r($matches);

(?=exp):匹配exp前面的位置

(?<=exp):匹配exp後面的位置

(?!exp):匹配後面跟的不是exp的位置(?

二、反向引用

反向引用用於重複搜尋前面某個分組匹配的文字。

例項:<?php

preg_match('/\b(w+)\b\s+\1\b', 'hello hello', $matches);

print_r($matches);

這裡的\1代表分組1匹配的文字。

再看乙個複雜一點的例子,就是比如論壇裡的表情替換。

<?php

$str = "[url]1bb.gif[/url][url]2_aa.gif[/url]";

$s = preg_replace('/\[url\](\w+\.gif)\[\/url\]/', '

正規表示式反向引用

微軟關於正規表示式的反向引用的官方文件 1 第1個 代表任意字元,後面的 代表 前面的任意字元有0個或多個 第2個 也代表任意字元,但它被括號括起來了,括號代表它 獲了,相當於被複製了,還沒被貼上 第3個 也代表任意字元,後面的 代表 前面的任意字元有0個或多個 第1個 代表轉譯符,這個符號不能直接...

表示式反向解析 正規表示式 反向引用

分組不僅用在匹配結果中,也可以在匹配的正規表示式中使用分組匹配的結果,這種功能稱為反向引用 backreference 當待匹配的字串中有些子字串出現多次的話,正規表示式模式可以將第乙個出現的子字串儲存在分組中,在模式的後面可以直接引用第乙個匹配的結果。因為分組即可通過索引也可以通過名字來訪問,所以...

正規表示式的反向引用

其實,小括號包含的表示式所匹配到的字串 不僅是在匹配結束後才可以使用,在匹配過程中也可以使用。表示式後邊的部分,可以引用前面 括號內的子匹配已經匹配到的字串 引用方法是 加上乙個數字。1 引用第1對括號內匹配到的字串,2 引用第2對括號內匹配到的字串 以此類推,如果一對括號內包含另一對括號,則外層的...