关闭

Java正则表达式

673人阅读 评论(0) 收藏 举报
正则表达式的各种符号及其含义 

                                常用的符号 
     .       表示任意一个字符 
    \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();
    }

}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:114775次
    • 积分:1470
    • 等级:
    • 排名:千里之外
    • 原创:19篇
    • 转载:32篇
    • 译文:0篇
    • 评论:12条
    文章分类
    最新评论