java正则表达式
一、基本使用
String content = "内容123abcd456789";
String regStr = "\\d";
Pattern compile = Pattern.compile(regStr);
Matcher matcher = compile.matcher(content);
while (matcher.find()) {
System.out.println(matcher.group());
}
二、常用表达式
[] 表示可接收的字符列表 如:[abc] 意思是只匹配a、b、c中的任意1个字符
[^] 表示不接收的字符列表 如:[^abc] 意思是匹配除a、b、c之外的任意1个字符
- 连接字符 如:[a-z] 意思是匹配从a到z的中的任意1个字符
^ 指定开始字符 如:^[a-z] 意思是字符串必须以任意一个小写字符开头
$ 指定结束字符 如:[a-z]$ 意思是字符串必须以任意一个小写字符结尾
\\d 表示匹配任意1个数字字符,相当于[0-9]
\\D 表示匹配任意1个非数字字符,相当于[^0-9]
\\w 表示匹配任意1个数字或大小写的字符,相当于[0-9a-zA-Z]
\\W 表示匹配任意1个非数字或大小写的字符,相当于[^0-9a-zA-Z]
\\num 表示匹配正整数
\\b 匹配目标字符串边界
\\B 匹配非目标字符串边界
\\f 表示换页符匹配
\\n 表示换行符匹配
\\r 表示回撤符匹配
\\t 表示制表符匹配
\\v 表示垂直制表符匹配
\\s 表示匹配任意1个空白字符(空格、制表格、换行符等),相当于[\\f\\n\\r\\t\\v]
\\S 表示匹配任意1个非空白字符(空格、制表格、换行符等),相当于[^\\f\\n\\r\\t\\v]
(?i) 表示不区分大小写 如:(?i)abc 意思是匹配abc、ABC、aBc等,a(?i)bc 匹配abc、aBC等,a((?i)b)c 匹配abc、aBc
{n} 表示匹配n次数 如:\\d{4} 意思是匹配任意连续的4个数字字符。比如:1234、5432、1999
{n,} 表示至少匹配n次 如:\\d{4,} 意思是匹配任意连续的4个数字字符。比如:1234、12345、123456
{n,m} 表示至少匹配n次不能超过m次 如:\\d{4,5 意思是匹配任意连续的4个数字字符。比如:1234、12345
. 表示匹配除\n之外的任意1个字符 如:\\d.\\d 意思是匹配1个数字开头1个数字结尾,中间1个任意字符。比如:123、1a3、1b3
* 表示匹配0到多次 如:\\d{4}.*(\\d) 意思是匹配4个数字开头1个数字结尾,中间0到多个任意字符。比如:12345或1234a5
+ 表示匹配1到多次 如:\\d{4}.+(\\d) 意思是匹配4个数字开头1个数字结尾,中间1到多个任意字符。比如:1234a5或1234ab5
| 表示选择匹配 如:\\d{4}(A|a)(\\d) 意思是匹配4个数字开头1个数字结尾,中间是A或a
? 表示匹配0到1次 如:\\d{4}(\\d)? 意思是匹配任意连续的4到5个数字字符。比如:1234、12345
注意:({n}、{n,}、{n,m}、*、+、?)默认都是贪婪匹配,按照最长的匹配信息匹配。
如果使用非贪婪匹配需要在限定符后面加上?,表达式就会按照最最短匹配信息匹配。
(pattern) 非命名捕获分组,通过下标获取:matcher.group(index);
(?<name>pattern) 命名捕获分组,通过下标或名称获取:matcher.group(name);
(?:pattern) 非捕获分组,取出匹配并保留匹配内容,不能通过下标获取
(?=pattern) 非捕获分组,取出匹配但不保留匹配内容,不能通过下标获取
(?!pattern) 非捕获分组,取出非匹配但不保留匹配内容,不能通过下标获取
\\数字 反向引用,数字表示引用第几组数据
案例:匹配两个连续相同的数字 (\\d)\\1
匹配五个连续相同的数字 (\\d)\\1{4}
匹配AABB格式数字 (\\d)(\\d)\\2\\1