正则表达式
正则表达式是对字符串执行模式匹配的技术。
正则表达式匹配流程
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到多个