预定义字符类 

    . 任何字符(与行结束符可能匹配也可能不匹配) 

    \d 数字:[0-9] 

    \D 非数字: [^0-9] 

    \s 空白字符:[ \t\n\x0B\f\r] 

    \S 非空白字符:[^\s] 

    \w 单词字符:[a-zA-Z_0-9] 

    \W 非单词字符:[^\w] 

    

注意:

    1.任何预定义字符没有加上数量词之前都只能匹配一个字符而已。

        

Greedy 数量词 

    X? X,一次或一次也没有 

    X* X,零次或多次 

    X+ X,一次或多次 

    X{n} X,恰好 n 次 

    X{n,} X,至少 n 次 

    X{n,m} X,至少 n 次,但是不超过 m 次 

注意:

    2.注意正则表达式里面不能随便加空格。会报错。

    

字符类(范围词) 

    [abc] a、b 或 c(简单类) 

    [^abc] 任何字符,除了 a、b 或 c(否定) 

    [a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围) 

    //下面的没必要

    [a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集)  等同于[a-dm-p] 

    [a-z&&[def]] d、e 或 f(交集) 

    [a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去) 

    [a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去) 

注意:

    3.范围词里面不管内容多长,没有数量词的配合都只能匹配一个字符而已。

    

边界匹配器 

    ^ 行的开头 

    $ 行的结尾 

    \b 单词边界    单词边界匹配器只是代表了单词的开始或者是结束部分,不匹配任何的字符。 

    \B 非单词边界 

    \A 输入的开头 

    \G 上一个匹配的结尾 

    \Z 输入的结尾,仅用于最后的结束符(如果有的话) 

    \z 输入的结尾 

组和捕获 

捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C))) 中,存在四个这样的组: 

\1     ((A)(B(C))) 

\2     \A 

\3     (B(C)) 

\4     (C) 

组零始终代表整个表达式。

package com.cn.regex;
/**
* Author:Liu Zhiyong
* Version:Version_1
* Date:
* Desc:
预定义字符类
. 任何字符(与行结束符可能匹配也可能不匹配)
\d 数字:[0-9]
\D 非数字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]

注意:
1.任何预定义字符没有加上数量词之前都只能匹配一个字符而已。

Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
注意:
2.注意正则表达式里面不能随便加空格。会报错。

字符类(范围词)
[abc] a、b 或 c(简单类)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)
//下面的没必要
[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集) 等同于[a-dm-p]
[a-z&&[def]] d、e 或 f(交集)
[a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去)
[a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去)
注意:
3.范围词里面不管内容多长,没有数量词的配合都只能匹配一个字符而已。

边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界 单词边界匹配器只是代表了单词的开始或者是结束部分,不匹配任何的字符。
\B 非单词边界
\A 输入的开头
\G 上一个匹配的结尾
\Z 输入的结尾,仅用于最后的结束符(如果有的话)
\z 输入的结尾
*/
public class Demo2 {
public static void main(String[] args) {
//预定义字符类
/*System.out.println("任意字符:"+ "%".matches("."));
System.out.println("数字字符:"+ "2".matches("\\d"));
System.out.println("非数字字符:"+ "(".matches("\\D"));
System.out.println("空白字符:"+ " ".matches("\\s"));
System.out.println("非空白字符:"+ "占".matches("\\S"));
System.out.println("单词字符:"+ "_".matches("\\w"));
System.out.println("非单词字符:"+ "*".matches("\\W"));*/

//Greedy 数量词
/*System.out.println("? 一次或一次也没有:" + ("8".matches("\\d?")));
System.out.println("* 零次或多次:" + ("888".matches("\\d*")));
System.out.println("+ 一次或多次:" + ("898".matches("\\d+")));
System.out.println("{n} 恰好 n 次 :" + ("123".matches("\\d{3}")));
System.out.println("{n,} 至少 n 次 :" + ("1234".matches("\\d{3,}")));
System.out.println("{n,m} 至少 n 次,但是不超过 m 次 :" + ("12345".matches("\\d{3,5}")));*/

//字符类(范围词)
/*System.out.println("abcab".matches("[abc]{3,5}"));
System.out.println("&".matches("[^abc]"));
System.out.println("z".matches("[a-z]"));
System.out.println("G".matches("[a-zA-Z]"));
System.out.println("$".matches("[a-zA-Z*#$]"));
System.out.println("n".matches("[a-dm-p]"));*/

System.out.println("hello,world".matches("\\bhello\\b,\\bworld\\b"));
}
}