和風(fēng)細(xì)雨

          世上本無(wú)難事,心以為難,斯乃真難。茍不存一難之見于心,則運(yùn)用之術(shù)自出。

          正則表達(dá)式進(jìn)階

          通配符^

          ^表示模式的開始,如^he匹配所有以he開頭的字符串.
          例程:
           String[] dataArr = { "he", "hero", "here", "hitler"};

              for (String str : dataArr) {
                String patternStr = "(^he)(\\w*)";

                boolean result = Pattern.matches(patternStr, str);
                if (result) {
                  System.out.println("字符串" + str + "匹配模式" + patternStr + "成功");
                } else {
                  System.out.println("字符串" + str + "匹配模式" + patternStr + "失敗");
                }
              }

          通配符$

          $表示模式的結(jié)束,如ia$匹配所有以ia結(jié)尾的單詞.
           String[] dataArr = { "ia", "Asia", "China", "Colonbia","America"};

              for (String str : dataArr) {
                String patternStr = "(\\w*)(ia$)";

                boolean result = Pattern.matches(patternStr, str);
                if (result) {
                  System.out.println("字符串" + str + "匹配模式" + patternStr + "成功");
                } else {
                  System.out.println("字符串" + str + "匹配模式" + patternStr + "失敗");
                }
              }

          通配符{}

          除了用+表示一次或多次,*表示0次或多次,?表示0次或一次外,還可以用{}來指定精確指定出現(xiàn)的次數(shù),X{2,5}表示X最少出現(xiàn)2次,最多出現(xiàn)5次;X{2,}表示X最少出現(xiàn)2次,多則不限;X{5}表示X只精確的出現(xiàn)5次.
          例程:
          String[] dataArr = { "google", "gooogle", "gooooogle", "goooooogle","ggle"};

          for (String str : dataArr) {
           String patternStr = "g(o{2,5})gle";

           boolean result = Pattern.matches(patternStr, str);
           if (result) {
            System.out.println("字符串" + str + "匹配模式" + patternStr + "成功");
           } else {
            System.out.println("字符串" + str + "匹配模式" + patternStr + "失敗");
           }
          }

          通配符[]中的-

          -表示從..到…,如[a-e]等同于[abcde]
           String[] dataArr = { "Tan", "Tbn", "Tcn", "Ton","Twn"};

              for (String str : dataArr) {
                String regex = "T[a-c]n";

                boolean result = Pattern.matches(regex, str);
                if (result) {
                  System.out.println("字符串" + str + "匹配模式" + regex + "成功");
                } else {
                  System.out.println("字符串" + str + "匹配模式" + regex + "失敗");
                }
              }

          Pattern類的方法簡(jiǎn)述
          方法 說明
          static Pettern compile(String regex,int flag) 編譯模式,參數(shù)regex表示輸入的正則表達(dá)式,flag表示模式類型(Pattern.CASE_INSENSITIVE 表示不區(qū)分大小寫)
          Matcher match(CharSequence input) 獲取匹配器,input時(shí)輸入的待處理的字符串
          static boolean matches(String regex, CharSequence input) 快速的匹配調(diào)用,直接根據(jù)輸入的模式regex匹配input
          String[] split(CharSequence input,int limit) 分隔字符串input,limit參數(shù)可以限制分隔的次數(shù)

          模式類型Pattern.CASE_INSENSITIVE

          正則表達(dá)式默認(rèn)都是區(qū)分大小寫的,使用了Pattern.CASE_INSENSITIVE則不對(duì)大小寫進(jìn)行區(qū)分.

           String patternStr="ab";
              Pattern pattern=Pattern.compile(patternStr, Pattern.CASE_INSENSITIVE);
             
              String[] dataArr = { "ab", "Ab", "AB"};
             
              for (String str : dataArr) {
                Matcher matcher=pattern.matcher(str);
               
                if(matcher.find()){
                  System.out.println("字符串" + str + "匹配模式" + patternStr + "成功");
                }
              }

          Pattern的split方法示例

           注意這里要把復(fù)雜的模式寫在前面,否則簡(jiǎn)單模式會(huì)先匹配上.

          String input="職務(wù)=GM 薪水=50000 , 姓名=職業(yè)經(jīng)理人 ; 性別=男  年齡=45 ";
              String patternStr="(\\s*,\\s*)|(\\s*;\\s*)|(\\s+)";
              Pattern pattern=Pattern.compile(patternStr);
             
              String[] dataArr=pattern.split(input);
             
              for (String str : dataArr) {
                System.out.println(str);
              }

          Matcher類的方法簡(jiǎn)述
          方法 說明
          boolean matches() 對(duì)整個(gè)輸入字符串進(jìn)行模式匹配.
          boolean lookingAt() 從輸入字符串的開始處進(jìn)行模式匹配
          boolean find(int start) 從start處開始匹配模式
          int groupCount() 返回匹配后的分組數(shù)目
          String replaceAll(String replacement) 用給定的replacement全部替代匹配的部分
          String repalceFirst(String replacement) 用給定的replacement替代第一次匹配的部分
          Matcher appendReplacement(StringBuffer sb,String replacement) 根據(jù)模式用replacement替換相應(yīng)內(nèi)容,并將匹配的結(jié)果添加到sb當(dāng)前位置之后
          StringBuffer appendTail(StringBuffer sb) 將輸入序列中匹配之后的末尾字串添加到sb當(dāng)前位置之后.

          匹配示例一:XML元素文字解析

          String regex="<(\\w+)>(\\w+)</\\1>";
          Pattern pattern=Pattern.compile(regex);
             
          String input="<name>Bill</name><salary>50000</salary><title>GM</title>";
             
          Matcher matcher=pattern.matcher(input);
             
          while(matcher.find()){
                System.out.println(matcher.group(2));
          }

          替換實(shí)例一:將單詞和數(shù)字部分的單詞換成大寫

              String regex="([a-zA-Z]+[0-9]+)";  
              Pattern pattern=Pattern.compile(regex);
             
              String input="age45 salary500000 50000 title";
             
              Matcher matcher=pattern.matcher(input);
             
              StringBuffer sb=new StringBuffer();
             
              while(matcher.find()){
                String replacement=matcher.group(1).toUpperCase();
                matcher.appendReplacement(sb, replacement);
              }
              matcher.appendTail(sb);
             
              System.out.println("替換完的字串為"+sb.toString());

           

          posted on 2008-02-21 20:20 和風(fēng)細(xì)雨 閱讀(554) 評(píng)論(0)  編輯  收藏 所屬分類: 正則表達(dá)式


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 武穴市| 改则县| 惠水县| 兴和县| 久治县| 开封市| 新建县| 蒲江县| 玛纳斯县| 威海市| 尼木县| 准格尔旗| 雷州市| 连城县| 安徽省| 卢湾区| 长治县| 新民市| 广平县| 潼关县| 梅州市| 郴州市| 盐山县| 长武县| 卢氏县| 辛集市| 蒲城县| 莲花县| 板桥市| 南充市| 探索| 乐业县| 济南市| 洛扎县| 梅河口市| 深圳市| 五华县| 龙陵县| 禄劝| 沙田区| 游戏|