校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 寫出高效率的正則表達(dá)式技巧總結(jié)

寫出高效率的正則表達(dá)式技巧總結(jié)

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

如果純粹是為了挑戰(zhàn)自己的正則水平,用來實現(xiàn)一些特效(例如使用正則表達(dá)式計算質(zhì)數(shù)、解線性方程),效率不是問題;如果所寫的正則表達(dá)式只是為了滿足一兩次、幾十次的運行,優(yōu)化與否區(qū)別也不太大。但是,如果所寫的正則表達(dá)式會百萬次、千萬次地運行,效率就是很大的問題了。

 為行文方便,先定義兩個概念。
誤匹配:指正則表達(dá)式所匹配的內(nèi)容范圍超出了所需要范圍,有些文本明明不符合要求,但是被所寫的正則式“擊中了”。例如,如果使用\d{11}來匹配11位的手機號,\d{11}不單能匹配正確的手機號,它還會匹配98765432100這樣的明顯不是手機號的字符串。我們把這樣的匹配稱之為誤匹配。
漏匹配:指正則表達(dá)式所匹配的內(nèi)容所規(guī)定的范圍太狹窄,有些文本確實是所需要的,但是所寫的正則沒有將這種情況囊括在內(nèi)。例如,使用\d{18}來匹配18位的身份證號碼,就會漏掉結(jié)尾是字母X的情況。
寫出一條正則表達(dá)式,既可能只出現(xiàn)誤匹配(條件寫得極寬松,其范圍大于目標(biāo)文本),也可能只出現(xiàn)漏匹配(只描述了目標(biāo)文本中多種情況種的一種),還可能既有誤匹配又有漏匹配。例如,使用\w+\.com來匹配.com結(jié)尾的域名,既會誤匹配abc_.com這樣的字串(合法的域名中不含下劃線,\w包含了下劃線這種情況),又會漏掉ab-c.com這樣的域名(合法域名中可以含中劃線,但是\w不匹配中劃線)。
精準(zhǔn)的正則表達(dá)式意味著既無誤匹配且無漏匹配。當(dāng)然,現(xiàn)實中存在這樣的情況:只能看到有限數(shù)量的文本,根據(jù)這些文本寫規(guī)則,但是這些規(guī)則將會用到海量的文本中。這種情況下,盡可能地(如果不是完全地)消除誤匹配以及漏匹配,并提升運行效率,就是我們的目標(biāo)。本文所提出的經(jīng)驗,主要是針對這種情況。
掌握語法細(xì)節(jié)。正則表達(dá)式在各種語言中,其語法大致相同,細(xì)節(jié)各有千秋。明確所使用語言的正則的語法的細(xì)節(jié),是寫出正確、高效正則表達(dá)式的基礎(chǔ)。例如,perl中與\w等效的匹配范圍是[a-zA-Z0-9_];perl正則式不支持肯定逆序環(huán)視中使用可變的重復(fù)(variable repetition inside lookbehind,例如(?=.*)abc),但是.Net語法是支持這一特性的;又如,JavaScript連逆序環(huán)視(Lookbehind,如(?=ab)c)都不支持,而perl和python是支持的。《精通正則表達(dá)式》第3章《正則表達(dá)式的特性和流派概覽》明確地列出了各大派系正則的異同,這篇文章也簡要地列出了幾種常用語言、工具中正則的比較。對于具體使用者而言,至少應(yīng)該詳細(xì)了解正在使用的那種工作語言里正則的語法細(xì)節(jié)。
先粗后精,先加后減。使用正則表達(dá)式語法對于目標(biāo)文本進行描述和界定,可以像畫素描一樣,先大致勾勒出框架,再逐步在局步實現(xiàn)細(xì)節(jié)。仍舉剛才的手機號的例子,先界定\d{11},總不會錯;再細(xì)化為1[358]\d{9},就向前邁了一大步(至于第二位是不是3、5、8,這里無意深究,只舉這樣一個例子,說明逐步細(xì)化的過程)。這樣做的目的是先消除漏匹配(剛開始先盡可能多地匹配,做加法),然后再一點一點地消除誤匹配(做減法)。這樣有先有后,在考慮時才不易出錯,從而向“不誤不漏”這個目標(biāo)邁進。
留有余地。所能看到的文本sample是有限的,而待匹配檢驗的文本是海量的,暫時不可見的。對于這樣的情況,在寫正則表達(dá)式時要跳出所能見到的文本的圈子,開拓思路,作出“戰(zhàn)略性前瞻”。例如,經(jīng)常收到這樣的垃圾短信:“發(fā)*票”、“發(fā)#漂”。如果要寫規(guī)則屏蔽這樣煩人的垃圾短信,不但要能寫出可以匹配當(dāng)前文本的正則表達(dá)式 發(fā)[*#](?:票|漂),還要能夠想到 發(fā).(?:票|漂|飄)之類可能出現(xiàn)的“變種”。這在具體的領(lǐng)域或許會有針對性的規(guī)則,不多言。這樣做的目的是消除漏匹配,延長正則表達(dá)式的生命周期。
明確。具體說來,就是謹(jǐn)慎用點號這樣的元字符,盡可能不用星號和加號這樣的任意量詞。只要能確定范圍的,例如\w,就不要用點號;只要能夠預(yù)測重復(fù)次數(shù)的,就不要用任意量詞。例如,寫析取twitter消息的腳本,假設(shè)一條消息的xml正文部分結(jié)構(gòu)是span class=”msg”>…/span>且正文中無尖括號,那么span class=”msg”>[^]{1,480}/span>這種寫法的思路要好于span class=”msg”>.*/span>,原因有二:一是使用[^],它保證了文本的范圍不會超出下一個小于號所在的位置;二是明確長度范圍,{1,480},其依據(jù)是一條twitter消息大致能的字符長度范圍。當(dāng)然,480這個長度是否正確還可推敲,但是這種思路是值得借鑒的。說得狠一點,“濫用點號、星號和加號是不環(huán)保、不負(fù)責(zé)任的做法”。
不要讓稻草壓死駱駝。每使用一個普通括號()而不是非捕獲型括號(?:…),就會保留一部分內(nèi)存等著你再次訪問。這樣的正則表達(dá)式、無限次地運行次數(shù),無異于一根根稻草的堆加,終于能將駱駝壓死。養(yǎng)成合理使用(?:…)括號的習(xí)慣。
寧簡勿繁。將一條復(fù)雜的正則表達(dá)式拆分為兩條或多條簡單的正則表達(dá)式,編程難度會降低,運行效率會提升。例如用來消除行首和行尾空白字符的正則表達(dá)式s/^\s+|\s+$//g;,其運行效率理論上要低于s/^\s+//g; s/\s+$//g; 。這個例子出自《精通正則表達(dá)式》第五章,書中對它的評論是“它幾乎總是最快的,而且顯然最容易理解”。既快又容易理解,何樂而不為?工作中我們還有其它的理由要將C==(A|B)這樣的正則表達(dá)式拆為A和B兩條表達(dá)式分別執(zhí)行。例如,雖然A和B這兩種情況只要有一種能夠擊中所需要的文本模式就會成功匹配,但是如果只要有一條子表達(dá)式(例如A)會產(chǎn)生誤匹配,那么不論其它的子表達(dá)式(例如B)效率如何之高,范圍如何精準(zhǔn),C的總體精準(zhǔn)度也會因A而受到影響。
巧妙定位。有時候,我們需要匹配的the,是作為單詞的the(兩邊有空格),而不是作為單詞一部分的t-h-e的有序排列(例如together中的the)。在適當(dāng)?shù)臅r候用上^,$,\b等等定位錨點,能有效提升找到成功匹配、淘汰不成功匹配的效率。

以上就是總結(jié)了幾條提升正則表達(dá)式運行效率的經(jīng)驗(工作中學(xué)到的,看書學(xué)來的,自己的體會),整理在這里。如果您有其它的經(jīng)驗而這里沒有提及,歡迎討論。

您可能感興趣的文章:
  • 正則表達(dá)式高級學(xué)習(xí)技巧
  • ASP正則表達(dá)式技巧
  • PHP 正則表達(dá)式的幾則使用技巧
  • 正則表達(dá)式高級技巧及實例詳解 笨活兒
  • javascript 正則表達(dá)式(二) 使用技巧說明
  • 模板引擎正則表達(dá)式調(diào)試小技巧
  • 正則表達(dá)式的高級技巧分享
  • .NET 正則表達(dá)式使用高級技巧之替換類介紹
  • 正則表達(dá)式匹配不包含某些字符串的技巧

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

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《寫出高效率的正則表達(dá)式技巧總結(jié)》,本文關(guān)鍵詞  寫出,高效率,的,正則,表達(dá)式,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《寫出高效率的正則表達(dá)式技巧總結(jié)》相關(guān)的同類信息!
  • 本頁收集關(guān)于寫出高效率的正則表達(dá)式技巧總結(jié)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    一区二区三区精品在线观看| 成人黄色片在线观看| 国产成人日日夜夜| 久久奇米777| 97久久久精品综合88久久| 亚洲一区二区高清| 欧美大尺度电影在线| 国产成人免费视频网站高清观看视频| 国产精品久久午夜| 91精品国产美女浴室洗澡无遮挡| 精品在线观看视频| 亚洲人一二三区| 日韩美女在线视频| 97成人超碰视| 久久机这里只有精品| 亚洲欧美中日韩| 日韩欧美亚洲国产精品字幕久久久| 国产精品12区| 欧美96一区二区免费视频| 中文字幕制服丝袜成人av | 欧美美女网站色| 国产精品伊人色| 成人在线视频一区二区| 在线视频中文字幕一区二区| 中文字幕成人av| 日韩一区二区在线观看视频播放| 国产亚洲欧洲997久久综合 | 欧美亚洲动漫精品| 99久久国产综合精品女不卡| 精油按摩中文字幕久久| 免费xxxx性欧美18vr| 免费在线看一区| 国产自产2019最新不卡| 九九久久精品视频| 成人ar影院免费观看视频| 国产成人午夜99999| 欧洲人成人精品| 日韩精品中文字幕在线不卡尤物| 日韩欧美一区二区在线视频| 欧美情侣在线播放| 成人综合婷婷国产精品久久蜜臀| 久久99在线观看| 99在线热播精品免费| 欧美一区二区三区四区视频| 久久久久久久久久久99999| 亚洲视频 欧洲视频| 麻豆免费精品视频| 欧美日韩在线播| 国产日韩欧美精品综合| 亚洲成人免费看| 成人晚上爱看视频| 精品不卡在线视频| 性欧美疯狂xxxxbbbb| 91亚洲大成网污www| 337p粉嫩大胆噜噜噜噜噜91av| 亚洲精品五月天| 日本乱码高清不卡字幕| 中文av字幕一区| 国产suv精品一区二区883| 日韩免费高清电影| 另类调教123区 | 一区在线观看免费| 韩国一区二区视频| 欧美精三区欧美精三区| 亚洲欧美日韩久久| 99久久精品免费看| 亚洲青青青在线视频| 日本久久一区二区| 日韩有码一区二区三区| 欧美一区二区三区系列电影| 日韩电影在线免费| 欧美大尺度电影在线| 成人黄色综合网站| 亚洲国产精品精华液网站| 欧美日韩亚洲丝袜制服| 久久精品国产亚洲高清剧情介绍 | 99精品久久只有精品| 一区二区中文字幕在线| 欧美性色欧美a在线播放| 五月婷婷综合激情| 中文成人综合网| 这里只有精品视频在线观看| 国产一区二区三区四| 国产精品超碰97尤物18| 欧美精品日韩一本| 高清beeg欧美| 亚洲福利一区二区三区| 久久久夜色精品亚洲| 91国在线观看| 韩国v欧美v亚洲v日本v| 亚洲午夜视频在线观看| 国产亚洲欧美日韩日本| 制服视频三区第一页精品| 韩国欧美国产一区| 亚洲精品视频免费看| 欧美不卡一区二区三区| 欧美视频一区二区在线观看| 国产大陆亚洲精品国产| 日日夜夜精品视频天天综合网| 亚洲色图欧美激情| 国产精品久久久久久久第一福利 | 国产凹凸在线观看一区二区| 偷窥国产亚洲免费视频| 亚洲综合图片区| 亚洲综合久久av| 一区二区三区 在线观看视频| 精品国产一区二区三区不卡| 欧美老女人第四色| 欧美一级二级三级乱码| 亚洲国产sm捆绑调教视频| 国产精品久久久久久久久免费丝袜| 精品国产亚洲在线| 欧美国产精品一区二区三区| 久久色在线观看| 国产欧美日韩精品一区| 亚洲第一久久影院| 国产在线乱码一区二区三区| 国产成a人亚洲精品| 成人av中文字幕| 欧美日韩精品欧美日韩精品一综合| 正在播放一区二区| 亚洲视频一区在线观看| 亚洲r级在线视频| 国产一区二区精品在线观看| 91国偷自产一区二区使用方法| 91麻豆精品国产91久久久久久| 国产日韩欧美亚洲| 蜜桃av一区二区| 色婷婷精品久久二区二区蜜臀av| 欧美日韩精品欧美日韩精品一 | 精品日产卡一卡二卡麻豆| 中文字幕二三区不卡| 天天综合色天天综合| 91婷婷韩国欧美一区二区| 欧美一级欧美三级| 午夜亚洲国产au精品一区二区| 国产美女娇喘av呻吟久久| 日韩欧美一二区| 蜜桃免费网站一区二区三区| 制服丝袜成人动漫| 亚洲国产成人91porn| 欧美视频三区在线播放| 亚洲在线中文字幕| 精品视频1区2区| 美女高潮久久久| 久久久美女艺术照精彩视频福利播放 | 一区二区三区在线播放| www.爱久久.com| 亚洲日本va午夜在线影院| 91原创在线视频| 三级一区在线视频先锋| 日韩欧美一区在线| 丁香婷婷综合激情五月色| 日韩伦理av电影| 欧美一级二级三级乱码| 激情综合网av| 中文字幕一区二区三区精华液| 99免费精品在线观看| 亚洲成人在线观看视频| 日韩免费高清电影| 成人黄页毛片网站| 免费成人av在线播放| 国产精品卡一卡二| 欧美精品免费视频| 在线亚洲一区二区| 国产精品综合在线视频| 一区二区三区资源| 国产精品免费av| 久久精品一区二区三区四区| 欧美精品在线一区二区| 91免费视频大全| 国产成人在线视频网站| 麻豆久久久久久| 日产国产高清一区二区三区| 亚洲精品欧美专区| 欧美国产精品一区二区三区| 欧美日韩国产免费| 欧美三级视频在线观看| www.亚洲精品| 91亚洲国产成人精品一区二区三| 美女被吸乳得到大胸91| 免费观看日韩电影| 精品一区二区三区香蕉蜜桃| 免费av成人在线| 国产激情精品久久久第一区二区| 老司机一区二区| 成年人网站91| 精品视频在线免费观看| 日韩免费看的电影| 国产亚洲短视频| 亚洲欧美国产77777| 青青青伊人色综合久久| 国产福利一区在线观看| 国产91精品一区二区| 色婷婷狠狠综合| 日韩欧美国产1| 亚洲视频在线观看一区| 日韩成人免费在线| www.av亚洲| 久久精品欧美一区二区三区麻豆|