婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 正則表達式話題

正則表達式話題

熱門標簽:湖南企業(yè)智能外呼系統(tǒng)供應商 高德地圖標注短信簽約 百音電話機器人 電銷機器人公司簡介 福州工作銷售電話機器人 RO地圖標注app 錫林郭勒盟地圖標注位置 自制電銷機器人 知名的電話機器人

From: www.regexlab.com

引言

    本文將逐步討論一些正則表達式的使用話題。本文為本站基礎篇之后的擴展,在閱讀本文之前,建議先閱讀正則表達式參考文檔一文。


1. 表達式的遞歸匹配

    有時候,我們需要用正則表達式來分析一個計算式中的括號配對情況。比如,使用表達式 "\( [^)]* \)" 或者 "\( .*? \)" 可以匹配一對小括號。但是如果括號內還嵌有一層括號的話,如 "( ( ) )",則這種寫法將不能夠匹配正確,得到的結果是 "( ( )" 。類似情況的還有 HTML 中支持嵌套的標簽如 "font> /font>" 等。本節(jié)將要討論的是,想辦法把有嵌套的的成對括號或者成對標簽匹配出來。

匹配未知層次的嵌套:

    有的正則表達式引擎,專門針對這種嵌套提供了支持。并且在棧空間允許的情況下,能夠支持任意未知層次的嵌套:比如 Perl,PHP,GRETA 等。在 PHP 和 GRETA 中,表達式中使用 "(?R)" 來表示嵌套部分。

    匹配嵌套了未知層次的 "小括號對" 的表達式寫法如下:"\(  ([^()]  |  (?R))*  \)"。

    [Perl 和 PHP 的示例代碼]

匹配有限層次的嵌套:

    對于不支持嵌套的正則表達式引擎,只能通過一定的辦法來匹配有限層次的嵌套。思路如下:

    第一步,寫一個不能支持嵌套的表達式:"\( [^()]* \)","font>((?!/?font>).)*/font>"。這兩個表達式在匹配有嵌套的文本時,只匹配最內層。

    第二步,寫一個可匹配嵌套一層的表達式:"\( ([^()] | \( [^()]* \))* \)"。這個表達式在匹配嵌套層數(shù)大于一時,只能匹配最里面的兩層,同時,這個表達式也能匹配沒有嵌套的文本或者嵌套的最里層。

    匹配嵌套一層的 "font>" 標簽,表達式為:"font>((?!/?font>).|(font>((?!/?font>).)*/font>))*/font>"。這個表達式在匹配 "font>" 嵌套層數(shù)大于一的文本時,只匹配最里面的兩層。

    第三步,找到匹配嵌套(n)層的表達式 與 嵌套(n-1)層的表達式之間的關系。比如,能夠匹配嵌套(n)層的表達式為:

    [標記頭]  ( [匹配 [標記頭] 和 [標記尾] 之外的表達式] | [匹配 n-1 層的表達式] )*  [標記尾]

    回頭來看前面編寫的“可匹配嵌套一層”的表達式:

  \( ( [^()] | \(([^()])*\) )* \)
font> ( (?!/?font>). | (font>((?!/?font>).)*/font>) )* /font>
             
PHP 和 GRETA 的簡便之處在于,匹配嵌套(n-1)層的表達式用 (?R) 表示:
\( ( [^()] | (?R) )* \)

    第四步,依此類推,可以編寫出匹配有限(n)層的表達式。這種方式寫出來的表達式,雖然看上去很長,但是這種表達式經過編譯后,匹配效率仍然是很高的。


2. 非貪婪匹配的效率

    可能有不少的人和我一樣,有過這樣的經歷:當我們要匹配類似 "td>內容/td>" 或者 "[b]加粗[/b]" 這樣的文本時,我們根據(jù)正向預搜索功能寫出這樣的表達式:"td>([^]|(?!/td>))*/td>" 或者 "td>((?!/td>).)*/td>"。

    當發(fā)現(xiàn)非貪婪匹配之時,恍然大悟,同樣功能的表達式可以寫得如此簡單:"td>.*?/td>"。頓時間如獲至寶,凡是按邊界匹配的地方,盡量使用簡捷的非貪婪匹配 ".*?"。特別是對于復雜的表達式來說,采用非貪婪匹配 ".*?" 寫出來的表達式的確是簡練了許多。

    然而,當一個表達式中,有多個非貪婪匹配時,或者多個未知匹配次數(shù)的表達式時,這個表達式將可能存在效率上的陷阱。有時候,匹配速度慢得莫名奇妙,甚至開始懷疑正則表達式是否實用。

效率陷阱的產生:

    在本站基礎文章里,對非貪婪匹配的描述中說到:“如果少匹配就會導致整個表達式匹配失敗的時候,與貪婪模式類似,非貪婪模式會最小限度的再匹配一些,以使整個表達式匹配成功。”

    具體的匹配過程是這樣的:

  1. "非貪婪部分" 先匹配最少次數(shù),然后嘗試匹配 "右側的表達式"。
  2. 如果右側的表達式匹配成功,則整個表達式匹配結束。如果右側表達式匹配失敗,則 "非貪婪部分" 將增加匹配一次,然后再嘗試匹配 "右側的表達式"。
  3. 如果右側的表達式又匹配失敗,則 "非貪婪部分" 將再增加匹配一次。再嘗試匹配 "右側的表達式"。
  4. 依此類推,最后得到的結果是 "非貪婪部分" 以盡可能少的匹配次數(shù),使整個表達式匹配成功。或者最終仍然匹配失敗。

    當一個表達式中有多個非貪婪匹配,以表達式 "d(\w+?)d(\w+?)z" 為例,對于第一個括號中的 "\w+?" 來說,右邊的 "d(\w+?)z" 屬于它的 "右側的表達式",對于第二個括號中的 "\w+?" 來說,右邊的 "z" 屬于它的 "右側的表達式"。

    當 "z" 匹配失敗時,第二個 "\w+?" 會 "增加匹配一次",再嘗試匹配 "z"。如果第二個 "\w+?" 無論怎樣 "增加匹配次數(shù)",直至整篇文本結束,"z" 都不能匹配,那么表示 "d(\w+?)z" 匹配失敗,也就是說第一個 "\w+?" 的 "右側" 匹配失敗。此時,第一個 "\w+?" 會增加匹配一次,然后再進行 "d(\w+?)z" 的匹配。循環(huán)前面所講的過程,直至第一個 "\w+?" 無論怎么 "增加匹配次數(shù)",后邊的 "d(\w+?)z" 都不能匹配時,整個表達式才宣告匹配失敗。

    其實,為了使整個表達式匹配成功,貪婪匹配也會適當?shù)摹白尦觥币呀浧ヅ涞淖址R虼素澙菲ヅ湟灿蓄愃频那闆r。當一個表達式中有較多的未知匹配次數(shù)的表達式時,為了讓整個表達式匹配成功,各個貪婪或非貪婪的表達式都要進行嘗試減少或增加匹配次數(shù),由此容易形成一個大循環(huán)的嘗試,造成了很長的匹配時間。本文之所以稱之為“陷阱”,因為這種效率問題往往不易察覺。

    舉例:"d(\w+?)d(\w+?)d(\w+?)z" 匹配 "ddddddddddd..." 時,將花費較長一段時間才能判斷出匹配失敗。

效率陷阱的避免:

    避免效率陷阱的原則是:避免“多重循環(huán)”的“嘗試匹配”。并不是說非貪婪匹配就是不好的,只是在運用非貪婪匹配的時候,需要注意避免過多“循環(huán)嘗試”的問題。

    情況一:對于只有一個非貪婪或者貪婪匹配的表達式來說,不存在效率陷阱。也就是說,要匹配類似 "td> 內容 /td>" 這樣的文本,表達式 "td>([^]|(?!/td>))*/td>" 和 "td>((?!/td>).)*/td>" 和 "td>.*?/td>" 的效率是完全相同的。

    情況二:如果一個表達式中有多個未知匹配次數(shù)的表達式,應防止進行不必要的嘗試匹配。

    比如,對表達式 "script language='(.*?)'>(.*?)/script>" 來說,如果前面部分表達式在遇到 "script language='vbscript'>" 時匹配成功后,而后邊的 "(.*?)/script>" 卻匹配失敗,將導致第一個 ".*?" 增加匹配次數(shù)再嘗試。而對于表達式真正目的,讓第一個 ".*?" 增加匹配成“vbscript'>”是不對的,因此這種嘗試是不必要的嘗試。

    因此,對依靠邊界來識別的表達式,不要讓未知匹配次數(shù)的部分跨過它的邊界。前面的表達式中,第一個 ".*?" 應該改寫成 "[^']*"。后邊那個 ".*?" 的右邊再沒有未知匹配次數(shù)的表達式,因此這個非貪婪匹配沒有效率陷阱。于是,這個匹配腳本塊的表達式,應該寫成:"script language='([^']*)'>(.*?)/script>" 更好。

標簽:茂名 西寧 河北 秦皇島 昆明 怒江 玉林 吉林

巨人網(wǎng)絡通訊聲明:本文標題《正則表達式話題》,本文關鍵詞  正則,表達式,話題,正則,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《正則表達式話題》相關的同類信息!
  • 本頁收集關于正則表達式話題的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    这里只有精品视频在线观看| 国产精品免费av| 精品卡一卡二卡三卡四在线| 亚欧色一区w666天堂| 成人午夜av影视| 久久久久久久久久久久电影| 日本一区二区不卡视频| 亚洲精品乱码久久久久久| 成人在线综合网| 一区二区三区蜜桃网| 欧美日韩国产系列| 一区二区三区视频在线观看| 欧美日韩中文字幕一区| 激情亚洲综合在线| 国产精品护士白丝一区av| 91免费看`日韩一区二区| 日韩成人午夜电影| 一区二区三区中文字幕精品精品| 日韩一区二区在线观看视频| 老司机免费视频一区二区三区| 久久伊99综合婷婷久久伊| 日本高清不卡一区| 国产成人日日夜夜| 婷婷久久综合九色综合绿巨人| 中文乱码免费一区二区| 久久蜜臀精品av| 精品美女一区二区| 日韩精品专区在线| 欧美大片一区二区三区| 欧美影院精品一区| 精品视频1区2区| 免费人成在线不卡| 毛片av一区二区三区| 免费在线观看精品| 加勒比av一区二区| 91老师国产黑色丝袜在线| 欧美日韩国产免费一区二区 | 日本亚洲欧美天堂免费| 亚洲一区欧美一区| 亚洲欧美日韩在线播放| 亚洲高清在线视频| 最新成人av在线| 亚洲人精品午夜| 欧美一级国产精品| 欧美自拍丝袜亚洲| 成人午夜激情影院| 国产91丝袜在线18| 美女mm1313爽爽久久久蜜臀| 另类调教123区 | 亚洲精品日韩一| 国产精品日日摸夜夜摸av| 日韩有码一区二区三区| 日韩电影在线一区二区三区| 午夜久久久影院| 国产原创一区二区| 奇米色一区二区三区四区| 国产精品久久久久久久久晋中| 国产精品素人一区二区| 亚洲成人综合在线| 91视频.com| 久久中文娱乐网| 久久久久久综合| 图片区小说区区亚洲影院| 成人欧美一区二区三区| 亚洲成av人在线观看| 国产一区二区按摩在线观看| av在线不卡电影| 91精品国产91久久久久久最新毛片 | 毛片av中文字幕一区二区| 国产一区二区免费视频| 91女人视频在线观看| 久久青草国产手机看片福利盒子| 久久色成人在线| 久久av资源网| 成人av在线网| 欧美日韩综合在线| 看片的网站亚洲| 日韩欧美一级二级| 亚洲一区二区三区在线播放| 日韩**一区毛片| 欧美日韩在线一区二区| 日韩电影在线一区二区三区| 91一区二区三区在线观看| 日韩精品专区在线影院重磅| 亚洲一区在线电影| 欧美一区三区二区| 一区二区三区在线观看欧美| 成人精品一区二区三区四区| 国产欧美日韩精品在线| 精品av综合导航| 久久精品99国产精品日本| 日韩久久免费av| 国产成人午夜精品影院观看视频| 2019国产精品| 国产尤物一区二区| 欧美激情在线一区二区| 91丨porny丨在线| 色综合久久久网| 久久久久免费观看| 色哟哟日韩精品| 日本色综合中文字幕| 亚洲精品久久久久久国产精华液| 精品国产欧美一区二区| 国产白丝网站精品污在线入口| 欧美精品精品一区| 美女尤物国产一区| 国产精品人妖ts系列视频| 粉嫩嫩av羞羞动漫久久久 | 日韩美女精品在线| 91精品久久久久久久91蜜桃| 国产一区二区视频在线| 亚洲主播在线播放| 国产精品进线69影院| 免费xxxx性欧美18vr| 欧美人xxxx| 亚洲成人黄色影院| 不卡av在线免费观看| 中文字幕不卡的av| 91在线视频观看| 日本aⅴ免费视频一区二区三区| 精品播放一区二区| 国产精品综合av一区二区国产馆| 国产农村妇女毛片精品久久麻豆 | 午夜视频一区二区| 国产欧美日韩视频在线观看| 欧美性生活久久| 成人ar影院免费观看视频| 久久精品999| 午夜免费欧美电影| 亚洲激情欧美激情| 亚洲综合在线第一页| 精品1区2区3区| 美国十次了思思久久精品导航| 亚洲精品免费电影| av在线一区二区| 国产人成亚洲第一网站在线播放| 亚洲综合在线视频| 亚洲欧美电影一区二区| 一区二区三区成人| 中文字幕中文字幕在线一区| 精品久久久久久久久久久久包黑料 | 日韩主播视频在线| 五月天网站亚洲| 久久99精品国产91久久来源| 国产成人免费在线视频| 日本aⅴ亚洲精品中文乱码| 一区二区三区自拍| 一区二区三区高清不卡| 亚洲高清在线精品| 亚洲永久精品国产| 樱桃视频在线观看一区| 国产欧美日韩综合精品一区二区| 日韩一区二区在线观看视频播放| 欧美在线视频全部完| 欧美视频在线一区| 91精品欧美一区二区三区综合在| 欧美人妇做爰xxxⅹ性高电影 | 亚洲成人福利片| 日本亚洲最大的色成网站www| 婷婷综合在线观看| 看片网站欧美日韩| 日韩在线一区二区| 日韩影视精彩在线| 久久夜色精品国产噜噜av| 91国产丝袜在线播放| 色偷偷久久人人79超碰人人澡| 96av麻豆蜜桃一区二区| 日韩理论片一区二区| 亚洲色大成网站www久久九九| 国产欧美日韩在线观看| 一级做a爱片久久| 亚洲丰满少妇videoshd| 日韩精品一级中文字幕精品视频免费观看| 日本美女视频一区二区| 国产一区二区三区四区五区美女| 欧美性生交片4| 国产精品久久久99| 亚洲免费资源在线播放| 韩国中文字幕2020精品| 在线观看一区二区精品视频| 国产欧美日本一区视频| 久久国产乱子精品免费女| 欧美亚洲综合久久| 亚洲永久免费av| 91麻豆国产香蕉久久精品| 欧美大片拔萝卜| 一区二区三区精品视频| 成人综合在线观看| 欧美一区二区成人| 婷婷中文字幕一区三区| 精品视频资源站| 亚洲激情欧美激情| 日本韩国视频一区二区| 亚洲精品精品亚洲| 在线中文字幕一区| 亚洲欧洲另类国产综合| 丁香激情综合五月| 国产精品毛片大码女人| 99精品久久只有精品| 亚洲国产美国国产综合一区二区|