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();
    }

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值