Java 正則表達式

很多時候,我們在前端頁面進行數據校驗的時候使用到正則表達式.但是正則表達式還有更強大的地方.

比如,很邪惡地去抓取別人的頁面數據.這時候,就是用Java進行正則表達式的時候了.

 public static void main(String[] args) {
    /*
         * 以下是對Matcher類的方法的簡介
         * Matcher appendReplacement(StringBuffer sb,String replacement) 將當前匹配子串替換爲指定字符串,並且將替換後的子串以及其之前到上次匹配子串之後的字符串段添加到一個StringBuffer對象裏。
         *  StringBuffer appendTail(StringBuffer sb) 將最後一次匹配工作後剩餘的字符串添加到一個StringBuffer對象裏。類包裏的解釋是:實現非終端追加和替換步驟。
         *   
         *  int end() 返回當前匹配的子串的最後一個字符在原目標字符串中的索引位置。
         *  int end(int group) 返回與匹配模式裏指定的組相匹配的子串最後一個字符的位置。
         *  boolean find() 嘗試在目標字符串裏查找下一個匹配子串。
         *  boolean find(int start) 重設Matcher對象,並且嘗試在目標字符串裏從指定的位置開始查找下一個匹配的子串。
         *  String group() 返回當前查找而獲得的與組匹配的所有子串內容
         *  String group(int group) 返回當前查找而獲得的與指定的組匹配的子串內容
         *  int groupCount() 返回當前查找所獲得的匹配組的數量。
         *  boolean lookingAt() 檢測目標字符串是否以匹配的子串起始。
         *  boolean matches() 嘗試對整個目標字符展開匹配檢測,也就是隻有整個目標字符串完全匹配時才返回真值。
         *  Pattern pattern() 返回該Matcher對象的現有匹配模式,也就是對應的Pattern對象。
         *  String replaceAll(String replacement) 將目標字符串裏與既有模式相匹配的子串全部替換爲指定的字符串。
         *  String replaceFirst(String replacement) 將目標字符串裏第一個與既有模式相匹配的子串替換爲指定的字符串。
         *  Matcher reset() 重設該Matcher對象。
         *  Matcher reset(CharSequence input) 重設該Matcher對象並且指定一個新的目標字符串。
         *  int start() 返回當前查找所獲子串的開始字符在原目標字符串中的位置。
         *  int start(int group) 返回當前查找所獲得的和指定組匹配的子串的第一個字符在原目標字符串中的位置。
         *
         *  下面用例子來介紹這些方法。
         */  

          
        /**
         * 測試Matcher類中以下三個方法:三個方法都將返回一個布爾值來表明成功與否
         * matches():方法嘗試對整個目標字符展開匹配檢測,也就是隻有整個目標字符串完全匹配時才返回真值。
         * lookingAt():方法將檢測目標字符串是否以匹配的子串起始。
         * boolean find():方法嘗試在目標字符串裏查找下一個匹配子串。
         * boolean find(int start): 重置此匹配器,然後嘗試查找匹配該模式、從指定索引開始的輸入序列的下一個子序列。
         * int start():返回以前匹配的初始索引。
         * int start(int group) : 返回在以前的匹配操作期間,由給定組所捕獲的子序列的初始索引。
         * int end():返回最後匹配字符之後的偏移量。   
         * int end(int group):返回在以前的匹配操作期間,由給定組所捕獲子序列的最後字符之後的偏移量。   
         */  

    
    
    Pattern p = Pattern.compile("[\u4e00-\u9fa5]");
    String input="<a href='http://www.baidu.com'>百度啊</a> <div>Hi All</div>";
    Matcher m = p.matcher(input);
    
    //只有整個目標字符串完全匹配時才返回真  完全匹配
    System.out.println(m.matches());
    
    StringBuffer sb = new StringBuffer();
    //查找下一個匹配子串
    while(m.find()){
        System.out.println("匹配了:"+m.group());
        m.appendReplacement(sb, "hello");
    }
    m.appendTail(sb);
    System.out.println(sb.toString());
    
    String input2 = "aaBBcccBBBddddBBBBeeeeeBBBBBfffff";
    Pattern pattern = Pattern.compile("B{2}");
    //find() 嘗試查找與該模式匹配的輸入序列的下一個子序列。  
    Matcher matcher = pattern.matcher(input2);
        System.out.println("需要被匹配的字符串是:"+input2+"長度是:"+input2.length()+"\n");  
        while(matcher.find()){  
            System.out.println("開始匹配位置是:"+matcher.start());  
            System.out.println(matcher.group());  
            System.out.println("結束匹配位置是:"+matcher.end()+"\n");  
        }  
        //find(int start) 重置此匹配器,然後嘗試查找匹配該模式、從指定索引開始的輸入序列的下一個子序列。  
        //這裏使用的是if 也就是每次調用find都是重start開始匹配,用while則死循環。  
        if(matcher.find(3)){  
            System.out.println("開始匹配位置是:"+matcher.start());  
            System.out.println("從第3個位置開始匹配捕獲的子字符串是:"+matcher.group());  
        }
        
    }



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章