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

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

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

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

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

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

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

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

          評論:
          # re: 淺談Java中正則表達式的優(yōu)化方法 2009-04-07 08:00 | shivaree
          補一句獨占模式,吃多少算多少,吃不準滾蛋。呵呵。  回復  更多評論
            
          主站蜘蛛池模板: 贺兰县| 衡阳县| 丹东市| 同心县| 柳江县| 綦江县| 西贡区| 陕西省| 鄂托克旗| 凤山县| 西乡县| 东辽县| 资兴市| 永川市| 大理市| 泾川县| 荃湾区| 枣强县| 静海县| 陇川县| 通城县| 长葛市| 永济市| 周至县| 宜春市| 清水河县| 北票市| 香河县| 天峨县| 龙胜| 双流县| 三都| 宁陵县| 庄浪县| 依兰县| 黔江区| 舟曲县| 延吉市| 泸溪县| 沙坪坝区| 青龙|