JAVA中的正则表达式--待续

1、关于“\”,在JAVA中的正则表达式中的不同;

    在其他语言中"\\"表示为:我想要在正则表达式中插入一个普通的反斜杠;

    在Java中“\\”表示为:我想要插入一个正则表达式反斜杠;

    eg:验证整数的正则表达式为\\d; 如果想要插入一个反斜杠则为:\\\\ ;

    如果是换行符和制表符则为\n 和\t ;

2、特殊字符

 

Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n
X{n,} X,至少 n
X{n,m} X,至少 n 次,但是不超过 m
 
Reluctant 数量词
X?? X,一次或一次也没有
X*? X,零次或多次
X+? X,一次或多次
X{n}? X,恰好 n
X{n,}? X,至少 n
X{n,m}? X,至少 n 次,但是不超过 m
 
Possessive 数量词
X?+ X,一次或一次也没有
X*+ X,零次或多次
X++ X,一次或多次
X{n}+ X,恰好 n
X{n,}+ X,至少 n
X{n,m}+ X,至少 n 次,但是不超过 m

演示代码:

package com.st.day20150525;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class StringTest03 {
    
    public static String message ="The class String includes methods for examining "
            + "individual characters of the sequence, for comparing strings, "
            + "for searching strings, for extracting substrings, and for "
            + "creating a copy of a string with all characters translated to "
            + "uppercase or to lowercase. Case mapping is based on the Unicode "
            + "Standard version specified by the Character class.";
    
    public static void main(String[] args) {
        /**
         * 首先介绍String自带的三个正则表达式的工具
         */
        //1、使用String中的内建的功能,进行字符的验证
        System.out.println("1、使用String中的内建的功能,进行字符的验证");
        System.out.println("1243".matches("-?\\d+"));
        System.out.println("+911".matches("-?\\d+"));
        System.out.println("+911".matches("(-|\\+)?\\d+"));
        
        System.out.println("----------------------------------------------");
        //2、使用String.split() 将字符串从正则表达式匹配的地方分开
        System.out.println("2、使用String.split() 将字符串从正则表达式匹配的地方分开");
        String[] str01 = message.split("of|to");    // 从of 或者 to 的地方进行分开
        for (int i = 0; i < str01.length; i++) {
            System.out.println("第"+i+": "+str01[i]);
        }
        String[] str02 = message.split("\\W");     // 从空格的地方进行分开
        for (int i = 0; i < str02.length; i++) {
            System.out.print("第"+i+": "+str02[i]+"  ");
        }
        System.out.println("----------------------------------------------");
        // 3、使用String中的替代,进行正则表达是的验证
        System.out.println("3、使用String中的替代,进行正则表达是的验证");
        String str03 = message.replaceFirst("the|of|to", "你被替换了");
        System.out.println(str03);
        // 替换所有的以f开头的单词
        String str04 = message.replaceAll("f\\w+", "apple");
        System.out.println(str04);
        System.out.println("----------------------------------------------");
        /**
         * 使用Pattern、Matcher进行正则表达式验证
         * Pattern:表示编译后的正则表达式对象,可以通过Pattern.compile()来编译你的表达式获取该对象
         * 调用Pattern对象中的matcher方法,传入你要验证的字符串,获取Macher对象;
         * 使用Matcher对象中的方法判断各种不同类型的对象是否匹配成功。
         * 
         * boolean matches()     字符完全匹配
         * boolean lookingAt()   判断字符串开始部分是否能够匹配(不一定是整个字符串)
         * boolean find()        多匹配,从头找到尾,找出所有匹配的字符
         * boolean find(int i)   从第i个字符进行匹配
         * 
         * find()可以在输入的字符的任何位置进行定位匹配正则表达式
         * lookingAt()和matches() 只有在字符的最开始的地方匹配才能成功,
         * lookingAt()只需要字符开始的一部分匹配成功就OK了,matches()需要字符完全的匹配
         */
        Pattern pattern = Pattern.compile("\\w+");     
        Matcher matcher = pattern.matcher("I am a good boy!");
        System.out.println("==========Matcher中的find=================");
        while(matcher.find()){
            System.out.println(matcher.group());    // 讲所有的单词隔开
        }
        int i = 0 ;  //  从第三个字符开始
        System.out.println("============测试find(int i)================");
        while(matcher.find(i)){
            System.out.print(matcher.group()+"  ");
            i++ ;
        }
        System.out.println("============测试find()、lookingAt()和matches()的不同=================");
        String str = "Today is a perfect day to start living your dream.";
        
        for(String reg:new String[]{"\\w+","Today.*","T\\w+"}){
            Pattern p = Pattern.compile(reg);
            Matcher m = p.matcher(str);
            while (m.find())  System.out.println("find() :"+m.group()+"==="+m.start()+"==="+m.end());
            System.out.println("---------------");
            if(m.matches()) System.out.println("matches() :"+m.start()+"====="+m.end());
            System.out.println("---------------");
            if(m.lookingAt()) System.out.println("lookingAt() :"+m.start()+"==="+m.end());
        }
        
        System.out.println("/////////////////////////////////////////////////////////////");
        /**
         * Pattern.compile(String reg,int flag);   //flag为标记参数
         * 在这里只介绍三种常用的标记参数
         * Pattern.CASE_INSENSITIVE   忽略大小写
         * Pattern.COMMENTS           忽略空格符和用“#”开始到行末的注释内容
         * Pattern.MULTILINE          多行表示,表达式^ 和 $ 匹配每一行的字符   
         */
        System.out.println("----------------Pattern标记-----------------------------");
        
        Pattern pa = Pattern.compile("^Java", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE) ;   // 通过 “|”的标识符,组合标记的功能
        Matcher ma = pa.matcher("Java is a laguage\njava regex\nJAVA is good,I like java.");
        while (ma.find()) {
            System.out.println(ma.group());
        }
    }
}

 

posted @ 2015-07-07 23:50  专注、坚持  阅读(191)  评论(0编辑  收藏  举报