Java正则表达式

正则表达式的各种符号及其含义 

                                常用的符号 
     .       表示任意一个字符 
    \s       空格字符(空格键, tab, 换行, 换页, 回车)  
    \S       非空格字符([^\s]) 
    \d       一个数字,(相当于[0-9]  ) 
    \D        一个非数字的字符,(相当于[^0-9] ) 
    \w       一个单词字符(word character)  (相当于 [a-zA-Z_0-9] ) 
    \W       一个非单词的字符,[^\w] 
     ^       一行的开始 
     $       一行的结尾 
    \b       一个单词的边界  
    \B       一个非单词的边界 
    \G       前一个匹配的结束 
    [ ]       匹配方括号内的一个字符 
             例如:[abc] 表示字符a,b,c 中的任意一个(与a|b|c 相同) 
             [a-zA-Z]    a  z  A   Z 
                   表示从  到  或     到  当中的任意一个字符 

“^”符号称为“否”符号。如果用在方括号内,“^”表示不想要匹配的字符

                             表示次数的符号 
     *       重复零次或更多次 
             例如:a* 匹配零个或者多个a 
     +       重复一次或更多次 
             例如:a+ 匹配一个或者多个a 
     ?       重复零次或一次 

             例如:a? 匹配零个或一个a 
    {n}      重复n 次 

             例如:a{4} 匹配4 个a 
    {n,}     重复n 次或更多次 

             例如:a{4,} 匹配至少4 个a 
   {n,m}     重复n 到m 次 

             例如:a{4,10} 匹配4~10 个a 


package lx.regex;

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

public class RegexStudy {

    Pattern mPattern;

    Matcher mMatcher;

    void setRegexAndInput(String regex, CharSequence input) {
        setRegexAndInput(regex, 0, input);
    }

    void setRegexAndInput(String regex, int flags, CharSequence input) {
        mPattern = Pattern.compile(regex, flags);
        mMatcher = mPattern.matcher(input);
        System.out.println("match result---->  " + mMatcher.matches() + "\n");
    }

    void test1() {
        // 表示首字母是a,中间是任意字符,结尾以b结束
        setRegexAndInput("a*b", "baaaab");
    }

    void test2() {
        // 表示第一位是1,第二位为3或5,结尾为9位数字的一串数字
        setRegexAndInput("^[1][3,5]+\\d{9}", "13812345678");
    }

    void test3() {
        // 表示15位或者18位数字的一串数字
        setRegexAndInput("\\d{15}|\\d{18}", "120101198506020080");
    }

    void test4() {
        // 表示匹配邮箱号码
        setRegexAndInput("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*", "lx@163.com");
    }

    void test5() {
        // 表示匹配所有123-12-1234形式的号码
        setRegexAndInput("[0-9]{3}\\-[0-9]{2}\\-[0-9]{4}", "454-17-7775");
    }

    void test6() {
        // 表示匹配四个数字加上二个字母
        setRegexAndInput("[0-9]{4}[A-Z]{2}", "4843QR");
    }

    void test7() {
        // 表示匹配所有单词,但“X”开头的除外
        setRegexAndInput("^[^X]", "AAXXX");
    }

    void test8() {
        // 表示匹配所有单词,但“X”开头的除外。。。有问题!
        // FIXME
        setRegexAndInput("([a-z]+)\\s+[0-9]{1,2},\\s*[0-9]{4}", "June 14, 1634");
    }

    void test9() {
        // 表示匹配IP地址
        setRegexAndInput("\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}", "192.168.1.1");
    }

    void test10() {
        // 表示匹配汉字字符串
        setRegexAndInput("^[\u4e00-\u9fa5]+$", "貂禅");
    }

    void test11() {
        /*
         * 匹配查找符合pattern的字符串 start()返回匹配到的子字符串在字符串中的索引位置.
         * end()返回匹配到的子字符串的最后一个字符在字符串中的索引位置. group()返回匹配到的子字符串
         */
        setRegexAndInput("java", Pattern.CASE_INSENSITIVE, "java JAVA Java java");// 不顾大小写
        while (mMatcher.find()) {
            System.out.println("result--->  " + mMatcher.group() + "\nStart from---> " + mMatcher.start() + " to---> "
                    + mMatcher.end() + ".\n");
        }
    }

    void test12() {
        /*
         * 本例groupCount将返回三组a11bbb、11、bbb
         */
        setRegexAndInput("\\w(\\d\\d)(\\w+)", "aa11bbb");
        if (mMatcher.find()) {
            int count = mMatcher.groupCount(); // 返回匹配组的数目,而不是匹配字符
            for (int i = 0; i <= count; i++)
                System.out.println("group " + i + " :" + mMatcher.group(i));
        }
    }

    void test13() {
        mPattern = Pattern.compile("\\d+"); // 将所含数字去掉
        String str[] = mPattern.split("aa11bbb33cc55gg");
        for (int i = 0; i < str.length; i++) {
            System.out.println(str[i]);
        }
    }

    void test14() {
        // 将所含数字全部替换为XX
        setRegexAndInput("\\d+", "aa11bbb33cc55gg");
        String str = mMatcher.replaceAll("XX");
        System.out.println(str);
    }

    void test15() {
        setRegexAndInput("55", "aa11bbb33cc55gg55yy");
        StringBuffer sb = new StringBuffer();
        while (mMatcher.find()) {
            mMatcher.appendReplacement(sb, "@@"); // 用@@替换所有的55
        }
        System.out.println(sb.toString()); // 打印aa11bbb33cc@@gg@@
        mMatcher.appendTail(sb); // 将最后一次替换后的字符串加上
        System.out.println(sb.toString()); // 打印aa11bbb33cc@@gg@@yy
    }

    /**
     * 常用的正则表达式
     */
    
    // email 正确的书写格式为 username@domain
    static String _email  = "\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";
    // 电话 正确格式 012-87654321、0123-87654321、0123-7654321
    static String _tel    = "\\d{4}-\\d{8}|\\d{4}-\\d{7}|\\d(3)-\\d(8)";
    // 手机号码 13187654321 13587654321
    static String _phone  = "^[1][3,5]+\\d{9}";
    // 汉字 中国
    static String _chinse = "^[\u4e00-\u9fa5]+$";
    // IP 192.168.1.1
    static String _ip     = "\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}";
    // QQ 456789
    static String _qq     = "[1-9][0-9]{4,13}";
    // 邮编 210000
    static String _mail   = "[1-9]\\d{5}(?!\\d)";
    // 身份证号码 15或者18位
    static String _id     = "\\d{15}|\\d{18}";

    public static void main(String[] args) {
        new RegexStudy().test15();
    }

}


阅读更多
个人分类: Java
想对作者说点什么? 我来说一句

JAAV正则表达式

2017年09月05日 80KB 下载

Java正则表达式Java正则表达式

2010年09月19日 4KB 下载

java正则表达式PPT

2010年07月20日 967KB 下载

Java正则表达式 Java 正则表达式

2009年12月02日 62KB 下载

java正则表达式大全。。

2011年04月06日 5KB 下载

Java 正则表达式详解

2008年12月09日 7KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭