目录
常规匹配:
String regStr = "abc"; //默认区分大小写
String regStr = "(?i)abc"; //不区分大小写01:abc均不区分
String regStr = "a(?i)bc"; //不区分大小写02:bc不区分
String regStr = "a((?i)b)c"; //不区分大小写03:b不区分
String regStr = "[1-9]"; //匹配1-9,随意数字
String regStr = "[^a-z]"; //匹配不是a-z之间的字符 (区分大小写,若要不区分大小写,即将A-Z也过滤,则使用不区分大小写04)
Pattern pattern = Pattern.compile(regStr02,Pattern.CASE_INSENSITIVE); // 不区分大小写04 INSENSITIVE:不敏感
String regStr = "[^1-9]{2}"; //匹配不是1-9之间的连续两个数字
String regStr = "[abcd]"; //匹配abcd中的任意一个字符
String regStr = "\\D"; //匹配不在 0-9 的任意一个字符 ,相当于 "[^0-9]"
String regStr = "\\w"; //匹配 大小写英文字母, 数字,下划线,相当于"[a-zA-Z0-9]"
String regStr = "\\W"; //匹配 等价于 [^a-zA-Z0-9_],相当于\\w取反
String regStr = "\\s"; //匹配任何空白字符(空格,制表符等)
String regStr = "\\S"; //匹配任何非空字符
String regStr = "."; //匹配除 \n 之外的所有字符,如果要匹配,本身则需要使用\\
选择匹配 (|)
public void select_match() {
String content = "魈、肖、万叶、钟离、神里绫人";
String regStr = "魈|肖";
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(content);
while (matcher.find()) {
System.out.println("找到:" + matcher.group(0));
}
}
限定符(+,*,{},?)
String regStr = "(abc)*"; //匹配任意几个连续的abc(0个或多个,每位不是abc的位置都有0个abc)
String regStr = "z + (abc)*"; //匹配z后接任意个数的abc
String regStr = "z + abc?"; //匹配z后接ab或abc的字符串
String regStr = "[abcd]{3}"; //匹配任意abcd中长度为3的字符串
String regStr = "[abcd]{3,}"; //匹配任意abcd中长度不小于3的字符串
String regStr = "[abcd]{3,5}"; //匹配任意abcd中长度不小于3,不大于5的字符串
String regStr = "\\d{2}"; //表示匹配 两位的任意数字字符
//细节:java 匹配默认贪婪匹配,即尽可能匹配多的(即优先以最长长度的形式输出)
String regStr = "a{3,4}"; //表示匹配 两位的任意数字字符
String regStr = "\\d{2,5}"; //匹配 2 位数或者 3位,4位,5位
String regStr = "1+"; //匹配一个 1 或者多个 1
String regStr = "\\d+"; //匹配一个数字或者多个数字
String regStr = "1*"; //匹配 0 个 1 或者多个 1
//演示?的使用, 遵守贪婪匹配
String regStr = "a1?"; //匹配 a 或者 a1
//非贪婪匹配
String regStr = "\\d+?";
定位符(^,$,\\b,\B)
String regStr = "^[0-9]+[a-z]*"; //匹配以0-9任意几个数字开头,以a-z任意小写字母结尾(有或无)
String regStr = "^[0-9]+[a-z]+$"; //匹配以0-9任意几个数字开头,以a-z任意小写字母结尾(必须是a-z结尾)
String regStr = "^[0-9]+\\-[a-z]+$"; //匹配以0-9任意几个数字开头,以a-z任意小写字母结尾(必须是a-z结尾),同时中间必须有 “ - “
String regStr = "han\\b"; //表示匹配边界(字符串的最后,和有空格间隔的字串最后)的han
String regStr = "han\\B"; //与\\b相反
分组匹配
public void capture() {
String content = "hjvhbjhv s7789 nn1189jhvjh";
//注:
//matcher.group(0)得到匹配字符串的全部内容
//matcher.group(1)得到匹配字符串的第1组内容
//matcher.group(2)得到匹配字符串的第2组内容
//未命名分组
// String regStr = "(\\d\\d)(\\d\\d)";
//命名分组
String regStr ="((?<g1>\\d\\d)(?<g2>\\d\\d))";
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(content);
while (matcher.find()) {
System.out.println("找到:" + matcher.group(0) +
" 第一个分组内容" + matcher.group(1) +
" 第一个分组内容(命名分组)" + matcher.group("g1") +
" 第二个分组内容" + matcher.group(2) +
" 第二个分组内容(命名分组)" + matcher.group("g2") );
}
}
非捕获分组
String regStr = "xx同学|xx姐姐|xx老师";
String regStr = "xx(?:同学|姐姐|老师)"; //查找后缀为同学、姐姐或老师的xx
String regStr = "xx(?=同学|姐姐)"; //查找后缀为同学、姐姐的xx
String regStr = "xx(?!同学|姐姐)"; //查找除了后缀为同学、姐姐的xx(即?=取反)