零全零美(www.zzgwt.com)
          生活中的很多事情,并不像If...Else那么簡(jiǎn)單!
          posts - 96,comments - 52,trackbacks - 0

          問(wèn)題提出:將格式為:"25/10/2009"的時(shí)間轉(zhuǎn)換為"2009-10-25"的格式
          問(wèn)題分析:
          1、年份2009、月份10、日25應(yīng)該做為一個(gè)獨(dú)立的單位,這樣我們可以直接知道什么地方匹配的是年、月還是日
          2、可以用\d\d\d\d來(lái)匹配年份,用\d\d來(lái)匹配月份,用\d\d來(lái)匹配日
          3、應(yīng)該可以有一個(gè)地方存儲(chǔ)匹配過(guò)的結(jié)果,以便于轉(zhuǎn)換
          解決問(wèn)題所必須知道的:
          1、分組就是將若干單位(可以是字符,正則表達(dá)式等等)組織在一起,成為一個(gè)獨(dú)立的單元,該單位可以跟獨(dú)立的字符一樣,受量詞的控制,分組使用()表示
          2、分組分為捕獲性分組和非捕獲性分組,簡(jiǎn)單的說(shuō)捕獲性分組就是捕獲分組所匹配的內(nèi)容暫且存儲(chǔ)在某個(gè)地方,以便下次使用,捕獲性分組以(...)表示,有些地方將取得捕獲性分組所匹配結(jié)果的過(guò)程稱之為"反向引用",非捕獲性分組不捕獲分組所匹配的內(nèi)容,當(dāng)然也就得不到匹配的結(jié)果,非捕獲性分組以(?:...)表示,在一些只需要分組匹配但是并不需要得到各個(gè)分組匹配的結(jié)果時(shí),使用非捕獲性分組可以提高匹配速度。
          3、在JavaScript和Java中,捕獲性分組所匹配的內(nèi)容都是以$1,$2,$3...的格式保存的!
          解決問(wèn)題:
          1、初步表達(dá)式:(\d\d)/(\d\d)/(\d\d\d\d),第一個(gè)分組(\d\d)表示日,第二個(gè)分組(\d\d)表示月,最后一個(gè)分組(\d\d\d\d)表示年
          2、取得匹配后的結(jié)果:
             在JavaScript中,分組匹配的結(jié)果是存儲(chǔ)在RegExp中的,可以通過(guò)RegExp.$1,RegExp.$2...來(lái)取得相應(yīng)的分組匹配結(jié)果

          <script type="text/javascript">
              
          <!--
                  window.onload 
          = function(){
                      
          var now = "25/10/2009";
                      
          /(\d\d)\/(\d\d)\/(\d\d\d\d)/.test(now);
                      alert(RegExp.$
          1); //25
                      alert(RegExp.$2); //10
                      alert(RegExp.$3); //2009
                  }

              
          //-->
              </script>  

          在Java中,可以通過(guò)Matcher的group(int)方法來(lái)取得:
          String now = "25/10/2009";
                  Matcher matcher 
          = Pattern.compile("(\\d\\d)/(\\d\\d)/(\\d\\d\\d\\d)").matcher(now);
                  
          if (matcher.find()) {
                      System.out.println(matcher.group(
          1));
                      System.out.println(matcher.group(
          2));
                      System.out.println(matcher.group(
          3));
                  }

          注意:在String的replace()方法中,也可以直接以$1,$2...的格式來(lái)取得匹配結(jié)果
          3、轉(zhuǎn)換:
             JavaScript:
              <script type="text/javascript">
              
          <!--
                  window.onload 
          = function(){
                      
          var now = "25/10/2009";
                      
          /(\d\d)\/(\d\d)\/(\d\d\d\d)/.test(now);
                      alert(RegExp.$
          3+"-"+RegExp.$2+"-"+RegExp.$1); //2009-10-25
                  }

              
          //-->
              </script>   

          Java:
          String now = "25/10/2009";
                  Matcher matcher 
          = Pattern.compile("(\\d\\d)/(\\d\\d)/(\\d\\d\\d\\d)").matcher(now);
                  
          if (matcher.find()) {
                      System.out.println(matcher.group(
          3+ "-" + matcher.group(2+ "-" + matcher.group(1));
                  }
           

          4、一個(gè)簡(jiǎn)單的寫法:

           JavaScript:
              <script type="text/javascript">
              
          <!--
                  window.onload 
          = function(){
                      
          var now = "25/10/2009";
                      alert(now.replace(
          /(\d\d)\/(\d\d)\/(\d\d\d\d)/,"$3-$2-$1")); //2009-10-25
                  }

              
          //-->
              </script>  

          Java:
          String now = "25/10/2009";
                  System.out.println(now.replaceAll(
          "(\\d\\d)/(\\d\\d)/(\\d\\d\\d\\d)""$3-$2-$1"));

          5、分組結(jié)果量詞使用
             上文提到,分組是可以結(jié)合量詞使用的,所以上面的程序也可以這樣來(lái)寫:
             JavaScript;
          <script type="text/javascript">
              
          <!--
                  window.onload 
          = function(){
                      
          var now = "25/10/2009";
                      alert(now.replace(
          /(\d{2})\/(\d{2})\/(\d{4})/,"$3-$2-$1")); //2009-10-25
                  }

              
          //-->
              </script>  

           Java:

                String now 
          = "25/10/2009";
                  System.out.println(now.replaceAll(
          "(\\d{2})/(\\d{2})/(\\d{4})""$3-$2-$1"));

            拋磚引玉,希望對(duì)您有所幫助!
            內(nèi)容原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處!
          posted on 2009-10-25 13:01 零全零美 閱讀(3981) 評(píng)論(2)  編輯  收藏 所屬分類: 正則表達(dá)式

          FeedBack:
          # re: [原創(chuàng)]正則表達(dá)式學(xué)習(xí)筆記(5):分組、捕獲性分組和非捕獲性分組
          2009-10-26 11:39 | 凡客誠(chéng)品
          分享了~謝謝~  回復(fù)  更多評(píng)論
            
          # re: [原創(chuàng)]正則表達(dá)式學(xué)習(xí)筆記(5):分組、捕獲性分組和非捕獲性分組
          2009-10-26 16:38 | 伊莎貝兒
          分組是可以結(jié)合量詞使用的  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 景德镇市| 察隅县| 呼伦贝尔市| 杭州市| 凌海市| 临沧市| 苏尼特左旗| 武邑县| 双峰县| 奈曼旗| 鲁山县| 松滋市| 天全县| 呈贡县| 岗巴县| 高尔夫| 梨树县| 建宁县| 永顺县| 三门峡市| 慈利县| 谢通门县| 彭阳县| 江口县| 泸州市| 武宁县| 手游| 云阳县| 汉川市| 双鸭山市| 邹平县| 康乐县| 东源县| 呼伦贝尔市| 海宁市| 临澧县| 六枝特区| 凌源市| 呈贡县| 如皋市| 江陵县|