正则表达式
说明: 正则表达式就是使用一种模式去匹配字符串的一个公式。
java简单实现
// 找出字符串中连续三个数字的子串
public static void main(String[] args) {
String str = "全球领先123的中文搜索引123擎、致力于让网民更12312便捷地123";
// \\d :表示一个任意的数字
String regStr = "(\\d\\d)(\\d)";
// 创建一个模式对象
Pattern compile = Pattern.compile(regStr);
/**
* 创建匹配器
* exp: 根据正则表达式[\\d{3}],去匹配字符串。
*/
Matcher matcher = compile.matcher(str);
// 开始匹配
/**
* matcher.find()
* 1.根据指定的规则,去找到满足规则的字符串(比如:123)
* 2.将子串开始的索引记录到matcher对象的int[] groups 中;
* groups[0] = 4 , 把子字符串结束的索引+1的值记录到 groups[1] = 7
* 3.同时记录oldLast的值为子字符串结束的索引+1(7),也就是下次执行find的时候
* 就从7开始匹配。
*
* matcher.group(0)
* 源码:
* public String group(int group) {
* if (first < 0)
* throw new IllegalStateException("No match found");
* if (group < 0 || group > groupCount())
* throw new IndexOutOfBoundsException("No group " + group);
* if ((groups[group*2] == -1) || (groups[group*2+1] == -1))
* return null;
* return getSubSequence(groups[group * 2], groups[group * 2 + 1]).toString();
* }
*
* 1.根据 groups[0] = 4 和 groups[1] = 7 记录位置,从str中截取子字符串,[5,8)。
*
* 如果再次执行 matcher.find() ,清空groups ;groups[0] = 13 , groups[1] = 16
* 从str中截取子字符串,[13,16)
*
* 分组:
* 正则表达式带有()表示分组。第1个(),表示第1组。。。。。
*
* matcher.find()
* 1.根据指定的规则,去找到满足规则的字符串(比如:(12)(3))
* 2.将子串开始的索引记录到matcher对象的int[] groups 中;
* 2.1 groups[0] = 4 , 把子字符串结束的索引+1的值记录到 groups[1] = 7
* 2.2 记录第1组()匹配到的字符串,groups[2] = 4,groups[3] = 6 ;
* 2.3 记录第2组()匹配到的字符串,groups[6] = 4,groups[7] = 6 ;
* 2.4 记录第3组......
* 3.同时记录oldLast的值为子字符串结束的索引+1(7),也就是下次执行find的时候
* 就从7开始匹配。
*/
while (matcher.find()) {
/**
* 小结:
* 1.如果正则表达式有():分组
* 2.group[0] 匹配整体的子字符串
* 3.group[1] 匹配整体的子字符串的第1组子串
* 4.group[2] 匹配整体的子字符串的第2组子串
*/
System.out.println("find String :" + matcher.group(0));
System.out.println("find String first group :" + matcher.group(1));
System.out.println("find String second group :" + matcher.group(2));
}
/**
* results:
* find String :123
* find String first group :12
* find String second group :3
* find String :123
* find String first group :12
* find String second group :3
* find String :123
* find String first group :12
* find String second group :3
* find String :123
* find String first group :12
* find String second group :3
*/
}
基本语法
限定符
字符匹配符
符号 | 说明 | 示例 | 解释 |
---|---|---|---|
[] | 可以匹配的字符列表 | [ABC] | 匹配ABC中任意一个字符 |
[^] | 匹配除了 [] 中字符的所有字符 | [^ABC] | 匹配除了ABC中任意一个字符 |
- | 连字符 | [A-Z] | 匹配除了A-Z之间的任意一个字符 |