Java 正则表达式

来源:互联网 发布:网络协议软件有哪些 编辑:程序博客网 时间:2024/05/20 00:50

很多时候,我们在前端页面进行数据校验的时候使用到正则表达式.但是正则表达式还有更强大的地方.

比如,很邪恶地去抓取别人的页面数据.这时候,就是用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());  
        }
        
    }



0 0
原创粉丝点击