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正则表达式的语法与示例

Java正则表达式的语法与示例 正则表达式是什么?用我的理解就是一个表达式。用来匹配,替换,判断字符串,之前业务就出现过判断返回值是否为邮箱。 以下内容来自于http://baike.xsoftla...
  • qq_19558705
  • qq_19558705
  • 2015年11月19日 09:49
  • 8016

Java 正则表达式的详细介绍以及实例演示

Java正则表达式的解释说明 表达式意义: 1.字符 x    字符 x。例如a表示字符a \\    反斜线字符。在书写时要写为\\\\。(注意:因为java在第一次解析时,把\\\\解析成...
  • qq_22118507
  • qq_22118507
  • 2016年06月14日 19:57
  • 4289

Java学习系列(二十四)Java正则表达式详解

正则表达式可以说是用来处理字符串的一把利器,它是一个专门匹配n个字符串的字符串模板,本质是查找和替换。在实例演示之前先了解一下Pattern、Matcher这两个工具类,Pattern:编译好的带匹配...
  • JAVE_LOVER
  • JAVE_LOVER
  • 2015年05月05日 17:22
  • 6520

Java学习笔记----正则表达式

本来以为正则表达式很简单的,不就是匹配一个字符串吗,今天仔细看了书,发现好多地方自己都不懂,上网找了找资料,发现正则表达式还是很强大的,而且想完全理解还是有一定难度的。 ps:在网上找资料的过程中,发...
  • txg703003659
  • txg703003659
  • 2011年08月04日 15:23
  • 3173

Java基础视频教程第25天_正则表达式

一、正则表达式——特点 正则表达式:符合一定规则的表达式。 作用:用于专门操作字符串。 String 类中对正则表达式应用的其中一个方法: boolean matches(String ...
  • yc081216
  • yc081216
  • 2015年03月20日 13:15
  • 807

JAVA正则表达式之全部符号解释

字符 描述 / 将下一个字符标记为一个特殊字符、或...
  • skywolf2002
  • skywolf2002
  • 2007年03月13日 10:56
  • 5939

java正则表达式教程(翻译)

翻译至:http://www.vogella.com/tutorials/JavaRegularExpressions/article.html 1、正则表达式 1.1、什么是正则表达式? ...
  • LinBilin_
  • LinBilin_
  • 2016年12月12日 17:31
  • 501

java 正则表达式 信息验证

第一种验证方式 Pattern p = Pattern.compile("模式");  Matcher m = p.matcher("要验证的信息");  boolean b = m.matches(...
  • zm19936
  • zm19936
  • 2016年02月25日 09:38
  • 78

[疯狂Java]正则表达式:Java正则表达式语法、贪婪模式/勉强模式

1. 基本字符和特殊字符:     1) 正则表达式前面讲过了,是需要先编译再执行的,因此从某种方面来将正则表达式其实也是一种特殊的编程语言;     2) 既然是编程语言(特殊的编程与语言)那么它就...
  • Lirx_Tech
  • Lirx_Tech
  • 2016年06月20日 15:10
  • 1250

java正则表达式捕获组

Java中使用正则表达式返回符合正则表达式的字符串就要用到group(),group中记录了所有符合指定表达式的字符串。本文通过一段代码讲解如何使用group()。 public static voi...
  • u012572955
  • u012572955
  • 2015年08月10日 14:40
  • 4609
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java正则表达式
举报原因:
原因补充:

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