正则表达式的概述
是指一个用来描述或者匹配一系列符合某个语法规则的字符串的单个字符串。其实就是一种规则。
字符
x 字符 x
\\ 反斜线字符
\0n 带有八进制值 0 的字符 n (0 <= n <= 7)
\0nn 带有八进制值 0 的字符 nn (0 <= n <= 7)
\0mnn 带有八进制值 0 的字符 mnn(0 <= m <= 3、0 <= n <= 7)
\xhh 带有十六进制值 0x 的字符 hh
\uhhhh 带有十六进制值 0x 的字符 hhhh
\t 制表符 ('\u0009')
\n 新行(换行)符 ('\u000A')
\r 回车符 ('\u000D')
\f 换页符 ('\u000C')
\a 报警 (bell) 符 ('\u0007')
\e 转义符 ('\u001B')
\cx 对应于 x 的控制符
字符类
[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-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](减去)
预定义字符类
. 任何字符
\d 数字:[0-9]
\D 非数字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
匹配
public boolean matches(String regex)告知此字符串是否匹配给定的正则表达式。
例:
String regex = "[abc]{5,15}";
System.out.println("abcba".matches(regex));
切割
public String[] split(String regex)根据给定正则表达式的匹配拆分此字符串。
例:
String s = "qqq.www.eee";
String[] arr = s.split("\\.");
替换
public String replaceAll(String regex,String replacement)使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
例:
String s = "q1a2q3";
String regex = "\\d"; //\\d代表的是任意数字
String s2 = s.replaceAll(regex, "-");
分组
正则表达式的分组功能,捕获组可以通过从左到右计算其开括号来编号。
例:
String s = "qqqqqaaaaawwwwww";
String s3 = s2.replaceAll("(.)\\1+", "$1"); //$1代表第一组中的内容
获取
将正则规则进行对象封装。
Pattern p = Pattern.compile("a*b");
通过正则对象的matcher方法字符串关联,获取要对字符串操作的匹配器对象Matcher。
Matcher m = p.matcher("aaaaaaab");
通过Matcher匹配器对象的方法对字符串进行操作。
boolean b = m.matches();
例:
Pattern p = Pattern.compile("a*b"); //获取到正则表达式
Matcher m = p.matcher("aaaaab"); //获取匹配器
boolean b = m.matches(); //看是否能匹配,匹配就返回true
System.out.println(b);
System.out.println("aaaaab".matches("a*b")); //与上面的结果一样
public boolean find()尝试查找与该模式匹配的输入序列的下一个子序列。
public String group()返回由以前匹配操作所匹配的输入子序列。