正则表达式
正则表达式是对字符串执行模式匹配的技术。
正则表达式匹配流程
private void RegTheory() {
// 正则表达式
String content = "1998年12月8日,第二代Java平台的企业版J2EE发布。1999年6月,Sun公司发布了第二代Java平台(简称为Java2) " +
"的3个版本: J2ME (Java2 Micro Edition,Java2平台的微型版),应用于移动、无线及有限资源的环境: J2SE (Java " +
"Standard Edition,Java 2平台的标准版),应用于桌面环境:2EE (Java 2Enterprise Edition,Java " +
"2平台的企业版) ,应用3443于基于Java的应用服务器。Java 2平台的发布,是Java发展过程中最重要的一个里程碑,标志着Java的应用开始普及9889";
// 目标 匹配所有数组的字符串
// 1、 \\d表示一个任意的数字
String regStr = "\\d\\d\\d\\d";
// 2、创建模式对象
Pattern pattern = Pattern.compile(regStr);
// 3、创建匹配器
// 说明,创建匹配器,按照正则表达式的规则去匹配
Matcher matcher = pattern.matcher(content);
while (matcher.find()){
Log.i(TAG,"找到:" + matcher.group(0));
}
}
2023-08-08 16:09:28.168 29172-29172/cn.jj.reg I/JJWorld.MainActivity: 找到:1998
2023-08-08 16:09:28.168 29172-29172/cn.jj.reg I/JJWorld.MainActivity: 找到:1999
2023-08-08 16:09:28.168 29172-29172/cn.jj.reg I/JJWorld.MainActivity: 找到:3443
2023-08-08 16:09:28.168 29172-29172/cn.jj.reg I/JJWorld.MainActivity: 找到:9889
private void RegTheory() {
// 正则表达式
String content = "1998年12月8日,第二代Java平台的企业版J2EE发布。1999年6月,Sun公司发布了第二代Java平台(简称为Java2) " +
"的3个版本: J2ME (Java2 Micro Edition,Java2平台的微型版),应用于移动、无线及有限资源的环境: J2SE (Java " +
"Standard Edition,Java 2平台的标准版),应用于桌面环境:2EE (Java 2Enterprise Edition,Java " +
"2平台的企业版) ,应用3443于基于Java的应用服务器。Java 2平台的发布,是Java发展过程中最重要的一个里程碑,标志着Java的应用开始普及9889";
// 目标 匹配所有数组的字符串
// 1、 \\d表示一个任意的数字
String regStr = "(\\d\\d)(\\d\\d)";
// 2、创建模式对象
Pattern pattern = Pattern.compile(regStr);
// 3、创建匹配器
// 说明,创建匹配器,按照正则表达式的规则去匹配
Matcher matcher = pattern.matcher(content);
/**
* matcher.find()
* 1、根据指定的规则,定位满足规则的子字符串(比如1998)
* 2、找到后,将 子字符串的开始的索引记录到 matcher对象的属性 int[] groups[0] = 0
* 把该子字符串的结束的索引+1的值记录到 groups[1] = 4
*
* 3、如果再次指向 find方法。仍然安上面分析来执行
*
* matcher.find() 考虑分组
* // 正则表达式中,包括小括号则表示分组
* 第一个小括号表示第一组 第二个小括号表示第二组 (\d\d)(\d\d)
*
* 1、根据指定的规则,定位满足规则的子字符串(比如1998)
* 2、找到后,将 子字符串的开始的索引记录到 matcher对象的属性 int[] groups;
* 2.1 groups[0] = 0 ,把该子字符的结束的索引+1的值记录到 groups[1] = 4
* 2.2 记录1组()匹配到的字符串 groups[2] = 0 groups[3] = 2
* 2.3 记录2组()匹配到的字符串 groups[4] = 2 groups[5] = 4
* 2.4 如果有更多的分组,依次类推
*
* 3、如果再次指向 find方法。仍然安上面分析来执行
*/
while (matcher.find()){
Log.i(TAG,"找到:" + matcher.group(0));
}
}
正则表达式语法
如果要想灵活的运用正则表达式,必须了解其中各种元字符的功能,元字符从功能上大致分为:
1、限定符
2、选择匹配符
3、分组组合和反向引用符
4、特殊字符
5、字符匹配符
6、定位符
转义符说明
元字符(Metacharacter)-转义号 \\
符号说明:
在我们使用正则表达式去检索某些特殊字符的时候,需要用到转义符号,否则检索不到结果,甚至会报错的。
案例: 用
去匹配会怎样
?
"
a
b
c
去匹配会怎样 ?" abc
去匹配会怎样?"abc("
用( 去匹配 “abc$(”会怎样 ?
private void RegTest2() {
String content ="abc$(abc(1.23(";
//匹配(
// String regStr = "\\(";
String regStr = "\\.";
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(content);
while (matcher.find()){
Log.i(TAG,"match:" + matcher.group(0));
}
}
元字符-字符匹配符
?表示0或者1
{3}表示三个数字
+代表1到多个