Java正则表达式

原创 2012年04月10日 17:10:58
正则表达式的各种符号及其含义 

                                常用的符号 
     .       表示任意一个字符 
    \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正则表达式使用demo

  • 2017年12月03日 23:07
  • 79KB
  • 下载

java-regex正则表达式

  • 2014年07月23日 11:05
  • 305KB
  • 下载

java 将英文文章 按句子,标点符号分割,正则表达式

package com.gao; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream;...

java正则表达式Pattern,Matcher

  • 2017年02月09日 14:31
  • 11KB
  • 下载

Java正则表达式详述

  • 2010年10月28日 14:40
  • 341KB
  • 下载

Java正则表达式中的十大问题

1.如何从一个字符串中提取数字? 使用正则表达式的一个常见问题是提取所有的数字到整数的数组。 在Java中,\ d代表的一系列数字(0-9)。使用预定义的类只要有可能会使你的代码更易于阅读和消除畸形...

Java正则表达式详细讲解

  • 2011年12月01日 20:22
  • 27.71MB
  • 下载

JAVA 正则表达式

  • 2012年02月01日 09:30
  • 89KB
  • 下载

java正则表达式提取需要的字符并放入数组;ArrayList数组去重复

/*1.java正则表达式提取需要的字符并放入数组;  *2.ArrayList数组去重复  *  *  *  *  *  *  *  */   package co...

JAVA正则表达式实例教程.

  • 2012年08月29日 09:47
  • 226KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java正则表达式
举报原因:
原因补充:

(最多只允许输入30个字)