1. <var id="fe6gj"></var>

    <rp id="fe6gj"><nav id="fe6gj"></nav></rp>

    <noframes id="fe6gj"><cite id="fe6gj"></cite>

    <ins id="fe6gj"><button id="fe6gj"><p id="fe6gj"></p></button></ins>
    1. <tt id="fe6gj"><i id="fe6gj"><sub id="fe6gj"></sub></i></tt>
        始創于2000年 股票代碼:831685
        咨詢熱線:0371-60135900 注冊有禮 登錄
        • 掛牌上市企業
        • 60秒人工響應
        • 99.99%連通率
        • 7*24h人工
        • 故障100倍補償
        您的位置: 網站首頁 > 幫助中心>文章內容

        教程精選:正則表達式快速入門<五>

        發布時間:  2012/8/13 13:53:06
         在上一篇文章里,我們介紹了正則表達式中的遞歸與替換,現在讓我們接觸一個學習正則表達式時方便測試使用的工具,并介紹一些正則表達式的編寫思路。

          一個學習正則表達式的便捷工具

          學習正則表達式最好的方法當然是實踐,不過支持正則表達式的工具雖多,但如果僅僅用來做練習卻不是很方便。

          這里我向一家推薦一款專門的正則表達式編寫測試工具,PHPEdit公司的Regular Expression Editor工具。這是一個免費軟件,主要用來調試PHP使用的Perl兼容正則表達式函數。使用它可以方便的輸入目標字符串和正則表達式,并實時看到匹配的結果?梢缘剿南螺d網頁去下載這個工具。

          程序的界面非常簡明,不過使用中發現,它的一些功能使用起來好像有問題,只有preg_match_all和preg_replace功能正常,另外在匹配模式輸入框中,不要加模式定界符,程序好像把該輸入框中的全部內容都作為模式來解析。

          好在做為一個正則表達式的練習工具,它的功能是足夠了,下面是它的運行界面。

         

          程序運行界面

          文中提到的各個例子都可以在里面進行測試,在最上面的框里輸入模式,把目標字符串寫進中間的輸入框,點擊“run the regxwp”按鈕可以在下面得到匹配結果。

          正則表達式的編寫思路

          一個避免過多匹配的小技巧

          前面我們已經多此談到書寫不合理的正則表達式引起過多匹配的問題,現在的問題是,如何可以盡量避免類似的情況發生。這里有個小小的技巧。

          如果你發現你定制模式匹配了過多的結果,一個好的方法是換個思路,與其考慮我的模式下一步需要匹配什么,不如考慮我的模式下一步需要避免匹配什么。我們可以用元字答“^”和字符類很容易的達成這種效果,這常?梢缘玫礁_的匹配。

          為了說明這種思路的好處我們先來舉一個與正則表達式無關的例子,考慮這樣一個問題,你把一個骰子一次拋出6的概率是六分之一,如果讓你擲六次,擲出一個6的概率是多少呢?

          可能有人會這么算,一次的概率是1/6,六次是就是6個1/6,加起來等于1。這個結果明顯是錯的,雖然你擲了六次,但肯定不能保證必然會擲出一個6。從正向的思路解這道題看上去有點難。

          如果我們換個思路,解決的方法就明確多了。我們可以把這個題的問法改成這樣,如果讓你擲6次骰子,每一次都擲不出6的概率是多少?這個問題就好解多了,根據概率的乘法原理,每一次擲出不是6的點數的概率是5/6,而6次中每一次都不是6的概率是5/6的6次方,大概等于33%的樣子,然后用1減去這個數字就可以得到我們需要的答案。

          你可以把模式中每部分的匹配看作擲一次骰子的過程,每一部分的匹配概率與總匹配概率的情況與我們上面這個例子非常相似。

          如何提高正則表達式的解析效率

          對同樣匹配內容的正則表達式而言,一些模式往往比另外一些模式更有效率。舉一個簡單的例子,使用字符類“[aeiou]”會比使用分支選擇型模式“(a|e|i|o|u).”更有效,一般而言,使用盡可能簡單和基本的模式通過會得到更高的效率。

          應該盡可能的慎用相互嵌套的無限重復量詞,當遇到不匹配的目標字符串時,對字符串的解析有可能花掉很可觀的時間。比如下面這個模式片斷“(a+)*”,當遇到不匹配的目標字符串“aaaa”時,解析器會對它嘗試33種不同的匹配方法,這個數目會隨不匹配字符串長度的增加而極快的增長。

          一些正則表達式工具對一些特定的模式匹配進行了優化以提高效率,了解你使用的正則表達式工作做過些什么優化并盡可能利用經過優化的模式可以大大提高你的正則表達式執行效率。例如,PHP對形如/a+)*b /這樣的模式的解析進行了優化,當模式結尾是一個確定的字符時,解析器會先查找目標的結尾是否符合模式,如果否則立刻返回失敗的匹配結果并停止解析。如果將上面的樣式改為“(a+)*\d”時,因為結尾不再是一個確定的字符,此模式會按正常的過程解析。如果你想看一下兩者效果的差異,你在我們前面提到的工具中,把目標字符串設置成25個小寫的a字符,然后分別測試兩個模式,前者立刻就結束了,而后者需要等待約一秒(筆者使用的是XP1700+處理器)。

          除了盡可能利用經過優化的模式,對一些模式進行重新構造也可以大大提高效率。我們在介紹后向斷言時介紹過的那個利用后向斷言結合一次性子模式匹配結尾的字符的方法就是一個很好的例子。

          這里我們準備結束這個教程,由于篇幅和本人水平的限制文中可能會有很多疏漏,還要請求大家諒解。對正則表達式介紹最全面的可能還是Perl相關的一些文檔和著作,如果想對正則表達式進行更深入的了解可以參看Jeffrey Friedl 寫的“Mastering Regular Expressions”一書,里面有很多例子。不過我覺得在了解正則表達式基本概念后,還是仔細讀一下自己經常使用的相關工具里的正則表達式相關部分更實用一些,最后,還是那句話,實踐出真知,希望大家在不斷實踐中更好的掌握正則表達式的使用。


        本文出自:億恩科技【www.endtimedelusion.com】

        服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質保障!--億恩科技[ENKJ.COM]

      1. 您可能在找
      2. 億恩北京公司:
      3. 經營性ICP/ISP證:京B2-20150015
      4. 億恩鄭州公司:
      5. 經營性ICP/ISP/IDC證:豫B1.B2-20060070
      6. 億恩南昌公司:
      7. 經營性ICP/ISP證:贛B2-20080012
      8. 服務器/云主機 24小時售后服務電話:0371-60135900
      9. 虛擬主機/智能建站 24小時售后服務電話:0371-60135900
      10. 專注服務器托管17年
        掃掃關注-微信公眾號
        0371-60135900
        Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權所有  地址:鄭州市高新區翠竹街1號總部企業基地億恩大廈  法律顧問:河南亞太人律師事務所郝建鋒、杜慧月律師   京公網安備41019702002023號
          0
         
         
         
         

        0371-60135900
        7*24小時客服服務熱線

         
         
        av不卡不卡在线观看_最近2018年中文字幕_亚洲欧美一区二区三区_一级A爱做片免费观看国产_日韩在线中文天天更新_伊人中文无码在线