主頁 > 知識(shí)庫 > 正則表達(dá)式、分組、子匹配(子模式)、非捕獲子匹配(子模式)

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

熱門標(biāo)簽:線上教育ai外呼系統(tǒng) 地圖標(biāo)注商戶中心要收錢多少 地圖標(biāo)注字母的軟件 鄂州人工智能電銷機(jī)器人軟件 css百度地圖標(biāo)注位置顯示 菏澤智能ai電銷機(jī)器人銷售公司 400免費(fèi)電話去哪申請(qǐng) 實(shí)用地圖標(biāo)注app 宿遷智能外呼系統(tǒng)供應(yīng)商

前面我們知道正則表達(dá)式有很多元字符表示匹配次數(shù)(量詞),都是可以重復(fù)匹配前面出現(xiàn)的單個(gè)字符次數(shù)。有時(shí)候,我們可能需要匹配一組多個(gè)字符一起出現(xiàn)的次數(shù)。這個(gè)時(shí)候,我們需要分組了。就是用小括號(hào)來括起這些字符,指定子表達(dá)式(也叫做分組)。然后你就可以指定這個(gè)子表達(dá)式的重復(fù)次數(shù)了,你也可以對(duì)子表達(dá)式進(jìn)行其它一些操作。這個(gè)時(shí)候,可以把括號(hào)中一組字符,看作一個(gè)整體了。

分組模式舉例說明

如:查找字符串中,連續(xù)出現(xiàn)多個(gè)win字符串的字符。可以這樣完

?php 
$str = "this is win winwindows!";
preg_match_all("/(win)+/",$str,$marr);
var_dump($marr);

不用分組模式,同時(shí)匹配多個(gè)字符,可以嗎? 我們發(fā)現(xiàn)以前操作符號(hào):[win]+,盡管可以匹配到winwin字符,因?yàn)樗硎怯衱,i,n組合的一個(gè)或者多個(gè)字符,不會(huì)限制順序。所見它會(huì)匹配到象:wwin,www,inw等等,只要是這3個(gè)字符組成的,多個(gè)字符都匹配成功了。

上面怎么匹配到,每一個(gè)有2個(gè)結(jié)果呢?這就是子模式(子匹配),默認(rèn)除了可以將多個(gè)字符組合一個(gè)整體,另外還會(huì)把括號(hào),括起來的這部分表達(dá)式存儲(chǔ)到一個(gè)臨時(shí)緩沖區(qū)中,以便后面正則表達(dá)式調(diào)用。上面這個(gè)例子里面,我們不需要,后期調(diào)用的。因此,怎么樣屏蔽掉這個(gè)子表達(dá)式捕獲內(nèi)容呢? 只需要在:前加上”?:” 即可。我們看看下面例子正則表達(dá)式 分組非捕獲模式。

非捕獲模式優(yōu)點(diǎn)有哪些呢? 從上面看,可以減少捕獲,也就會(huì)減少匹配次數(shù)。因此,在不必要分組表達(dá)式加入非捕獲前綴”?:”,可以節(jié)省內(nèi)存開銷,并且可以提升匹配速度!

剛剛說到了正則表達(dá)式分組,默認(rèn)情況會(huì)將子表達(dá)式捕獲內(nèi)容,存儲(chǔ)到一個(gè)緩存區(qū)。以便后續(xù)調(diào)用。 那這個(gè)是什么樣情況呢?其實(shí),這個(gè)是正則表達(dá)式的引用。所捕獲的每個(gè)子匹配都按照在正則表達(dá)式模式中從左至右所遇到的內(nèi)容按順序存儲(chǔ)。存儲(chǔ)子匹配的緩沖區(qū)編號(hào)從1開始,最多可以一般存儲(chǔ)為9。以便后面表達(dá)式引用該值,又叫后向引用。

我們看下下面例子,查找一個(gè)字符串中,互不相鄰,出現(xiàn)多次系統(tǒng)單詞:add。

?php
$str = "add123456addasdf"; 
preg_match_all('/(add)\d+\1/',$str,$marr); 
var_dump($marr);

反向引用,常用來處理一些處理一些特殊匹配情況。如:查找字符串中,不相鄰重復(fù)字符串。查找html一對(duì)標(biāo)簽中內(nèi)容。特別分析html非常常見了(注意,如果使用了反向引用,前面不能屏蔽子匹配捕獲,也就是不能加”?:"前綴了)。經(jīng)常會(huì)用:

?php
$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...>中間內(nèi)容/tag> 表示中間內(nèi)容,到""結(jié)束,因此匹配所有[^]* 字符
// 最后的\/\1> "\/" 轉(zhuǎn)義"/"字符,后面的"\1" 表示反向應(yīng)用前面的(\S+)

以上是正則表達(dá)式使用比較重要的,分組,反向匹配,以及非捕獲分組說明及實(shí)例。希望對(duì)要屬性改功能朋友有所幫助。同時(shí)歡迎朋友們交流!

您可能感興趣的文章:
  • 正則表達(dá)式學(xué)習(xí)教程之回溯引用backreference詳解
  • Python正則表達(dá)式分組概念與用法詳解
  • 正則表達(dá)式分組實(shí)例詳解
  • javascript正則表達(dá)式中分組詳解
  • 正則表達(dá)式之分組的回溯引用問題

標(biāo)簽:六安 咸陽 鞍山 綿陽 恩施 池州 梅州 三亞

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《正則表達(dá)式、分組、子匹配(子模式)、非捕獲子匹配(子模式)》,本文關(guān)鍵詞  正則,表達(dá)式,分組,子,匹配,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《正則表達(dá)式、分組、子匹配(子模式)、非捕獲子匹配(子模式)》相關(guān)的同類信息!
  • 本頁收集關(guān)于正則表達(dá)式、分組、子匹配(子模式)、非捕獲子匹配(子模式)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章