Andy 胡

导航

Java中的正则表达式

package test_util.regular_Exp;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test02各种表达式 {
    public static void main(String[] args) {
        System.out.println("------预定义字符(即通配符)------");
        test匹配("12abAB一二$_*#", ".", ".匹配任何一个字符");
        test匹配("12abAB一二$_*#", "\\d", "(digit)匹配数字0-9");
        test匹配("12abAB一二$_*#", "\\D", "匹配非数字");
        test匹配("12abAB一二$_*#", "\\w", "(word)匹配单词字符,包括0~9,英文字母,下划线");
        test匹配("12abAB一二$_*#", "\\W", "匹配非单词字符");
        test匹配("12[   ]ab\rAB\n一二\t$_*#", "\\s", "(space)匹配空白字符");
        test匹配("12[   ]ab\rAB\n一二\t$_*#", "\\S", "匹配非空白字符");
        System.out.println("------边界匹配符------");
        test匹配("never end", "er\\b", "\\b:匹配一个字边界,即字与空格间的位置");
        test匹配("is a verb", "er\\B", "\\B:匹配非字边界");
        test匹配("This is", "^(This)", "^匹配开头");
        test匹配("The End.", "(End\\.)$", "$匹配结尾(.是预定义字符,需要转义一下)");
        System.out.println("------[中括号用法]------");
        test匹配("andy,bob,cat,dog", "[abc]", "字符集,匹配其中一个字符");
        test匹配("00,01,1a,2c,3e,5f,6g", "[a-f]", "字符范围,匹配指定范围中任何字符");
        test匹配("00,01,1a,2c,3e,5f,6g", "[^a-f]", "反向范围字符,匹配指定范围以外的任何字符");
        test匹配("12abAB一二$_*#", "[\u4E00-\u9FA5]", "匹配中文");
        System.out.println("------AND OR------");
        test匹配("0123456789", "[1-9&&[^8]]", "&&:与,同时满足");
        test匹配("0123456789", "[1-7,9]", "逗号");
        test匹配("food,zood,wood", "(z|f)ood", "|:或");
        System.out.println("------重复------");
        test匹配("z_zo_zoo", "zo+", "一次或多次匹配");
        test匹配("z_zo_zoo", "zo{1,}", "+ 等效于 {1,}");
        test匹配("z_zo_zoo", "zo*", "零次或多次匹配");
        test匹配("z_zo_zoo", "zo{0,}", "* 等效于 {0,}");
        test匹配("z_zo_zoo", "zo?", "零次或一次匹配(多次配上也不管)");
        test匹配("z_zo_zoo", "zo{0,1}", "? 等效于 {0,1}");
    }
    static void test匹配(String s, String sRegex, String msg) {
        // Pattern:正则表达式经编译后的表现模式
        Pattern p = Pattern.compile(sRegex);
        // Matcher:根据Pattern对象做为匹配模式,对字符串展开匹配检查。
        Matcher m = p.matcher(s);
        System.out.print("【" + sRegex + "】" + msg + ":");
        while (m.find()) {
            System.out.print(m.group() + ",");
        }
        System.out.println();
    }
}

 

package test_util.regular_Exp;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test03常用效验 {
    public static void main(String[] args) {
        String[] sArray = null;
        String sRegEx = null;
        System.out.println("------手机号效验------");
        // 移动号码段:139、138、137、136、135、134、150、151、152、157、158、159、182、183、187、188、147
        // 联通号码段:130、131、132、136、185、186、145
        // 电信号码段:133、153、180、189
        sArray = new String[] { "13200000001", "15400000002", "13300000003" };
        sRegEx = "^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\\d{8}$";
        validate(sArray, sRegEx);
        System.out.println("------身份证效验------");
        sArray = new String[] { "42002719991231000X", "42002719991231A", "420027199912313",
                "42002719991231004" };
        sRegEx = "(^\\d{15}$)|(^\\d{17}(\\d|X|x)$)";
        validate(sArray, sRegEx);
        System.out.println("------邮箱效验------");
        sArray = new String[] { "andy@163.com", "bob@qq.com", "cat@hotmail.99" };
        sRegEx = "^\\w+@\\w+.[a-zA-Z]{2,3}(.[a-zA-Z]{2,3})?$";
        validate(sArray, sRegEx);
    }
    static void validate(String[] sArray, String sRegEx) {
        Pattern _pattern = Pattern.compile(sRegEx);
        Matcher matcher = null;
        for (String s : sArray) {
            if (matcher == null) {
                matcher = _pattern.matcher(s);
            } else {
                matcher.reset(s);
            }
            String result = s + (matcher.matches() ? "\t有效" : "\t无效");
            System.out.println(result);
        }
    }
}

 

posted on 2018-07-08 20:51  talkwah  阅读(181)  评论(0编辑  收藏  举报