Blog 正则表达式

总的来说博客中讲的太少了,还是要看编程思想,里面有关于这部分非常全面的讲解。 

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

public class Ans {
    public static void main(String[] args) {
        test1();
        test3();
        test5();
    }

    static void test1() {
        //注意\d匹配数字,\D匹配非数字
        //{n}为匹配n个,{n,m}匹配n到m个,{n,}匹配至少n个
        //使用String.matches反复匹配一个表达式会不断创建相同的Pattern,导致一些性能上的浪费
        String re0 = "\\d",re1 = "\\D",re2 = "\\d{3}",re3 = "\\d{2,4}",re4 = "\\d{2,}";
        System.out.println("1".matches(re1));
        System.out.println("111".matches(re2));
        System.out.println("111".matches(re3));
        System.out.println("1111111".matches(re4));
    }

    static void test2() {
        // ^为开头,$为结尾
    }

    static void test3() {
        //括号可以在匹配时起到分组的作用
        Pattern p = Pattern.compile("(\\d{3})(\\d{2,6})");
        Matcher m = p.matcher("112456");
        if (m.matches()) {
            System.out.println(m.group(1));
            System.out.println(m.group(2));
        }
    }

    static void test4() {
        //java 默认为贪婪匹配,加上?变为勉强型,加上+变为占有型(在编程思想中讲到)
    }

    static void test5() {
        //再替换时可以使用$来反向匹配
        Pattern p = Pattern.compile("([a-z]{2,5})(\\d{1,4})");
        Matcher m = p.matcher("adada132 dai3 aod9qeq aoaoddidi44");
        System.out.println(m.replaceAll("<a>$1<a><b>$2<b>"));
    }
}

 

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