隨筆-199  評(píng)論-203  文章-11  trackbacks-0
             獲取每次使用引起小損失的分組。如果你實(shí)際并不需要獲取一個(gè)分組內(nèi)的文本,那么就使用非捕獲分組。例如使用“(?:X)”代替“(X)”。

              讓引擎完成優(yōu)化(Let the engine do the work for you)

              如上面我所提到的,java.util.regex包可以編JAVA譯正則表達(dá)式時(shí)對(duì)其優(yōu)化。例如,正則表達(dá)式中包含了一個(gè)必須在輸入字符串中出現(xiàn)的字符串(或者整個(gè)表達(dá)式都不匹配),引擎有時(shí)會(huì)首先搜索該字符串,如果沒有找到匹配就會(huì)報(bào)告失敗,不再檢查整個(gè)正則表達(dá)式。

              另外非常有用地自動(dòng)優(yōu)化正則表達(dá)式的方式讓引擎根據(jù)正則表達(dá)式中的期望長(zhǎng)度檢查輸入字符串的長(zhǎng)度。例如,表達(dá)式“\d{100}”是內(nèi)在優(yōu)化的,以致于如果輸入字符串不是JAVA100個(gè)字符,引擎就會(huì)報(bào)告失敗,而不再考察整個(gè)正則表達(dá)式。

              無論何時(shí)編寫復(fù)雜的正則表達(dá)式時(shí),嘗試找出一種編寫方式使引擎可以識(shí)別和優(yōu)化這些特殊情況。例如,不要在分組或選擇中隱藏命令字符串,因?yàn)橐娌粫?huì)識(shí)別它們。若有可能,指定你想要匹JAVA配的輸入字符串的長(zhǎng)度也是相當(dāng)有用的,如上例所示。

              優(yōu)化貪婪模式和勉強(qiáng)模式(Optimizing greedy and reluctant quantifiers)

              你已經(jīng)有了如何優(yōu)化正則表達(dá)式的基本概念,其中一些方式可以JAVA讓引擎來完成優(yōu)化。現(xiàn)在我們討論優(yōu)化貪婪模式和勉強(qiáng)模式。貪婪模式量詞如“*”或“+”,會(huì)首先從輸入字符串中嘗試匹配盡可能多的字符,即使這意味著字符串中的剩下的內(nèi)容已經(jīng)不足以匹配正則表達(dá)式的其余部分。如果是這樣,貪婪模式量詞就會(huì)回縮,返回字符,知道可以完全匹配或者沒有字符了。勉強(qiáng)(或者lazy)模式,另一方面,會(huì)首先嘗試匹配輸入字符串中盡可能少的字符。

          posted on 2009-04-06 20:12 Werther 閱讀(264) 評(píng)論(1)  編輯  收藏 所屬分類: 10.Java

          評(píng)論:
          # re: 淺談Java中正則表達(dá)式的優(yōu)化方法 2009-04-07 08:00 | shivaree
          補(bǔ)一句獨(dú)占模式,吃多少算多少,吃不準(zhǔn)滾蛋。呵呵。  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 宝鸡市| 芮城县| 固原市| 嵩明县| 白水县| 嘉义县| 玉龙| 太白县| 湖州市| 宁明县| 张家界市| 南溪县| 海丰县| 延安市| 兰溪市| 罗定市| 祥云县| 贵定县| 兴隆县| 克什克腾旗| 赫章县| 视频| 射阳县| 那坡县| 丘北县| 濉溪县| 四子王旗| 新密市| 八宿县| 兴隆县| 凤山市| 兰坪| 博湖县| 毕节市| 宝丰县| 鄢陵县| 盈江县| 云安县| 日照市| 和硕县| 和顺县|