day50-正则表达式01( 二 )


提取所有数字:

day50-正则表达式01

文章插图
提取ip地址:
day50-正则表达式01

文章插图
正则表达式是处理文本的利器
  • 再提出几个问题
    • 在程序中如何验证用户输入的邮件信息是否符合电子邮件的格式?
    • 如何验证输入的电话号码是符合手机号格式?
为了解决上述问题,java提供了正则表达式技术(regular expression / regexp),专门用于处理类似的文本问题 。简单地说,正则表达式是对字符串执行 模式匹配 的技术 。
5.2基本介绍
  • 介绍
  1. 一个正则表达式,就是用某种模式去匹配字符串的一个公式 。
    它们看上去奇怪而复杂,但经过练习后,你就会发现这些复杂的表达式写起来还是相当简单的 。而且,一旦弄懂它们,就能将数小时辛苦而且容易出错的文本处理工作缩短在几分钟甚至几秒内完成 。
  2. 正则表达式不是java独有的,实际上很多编程语言都支持正则表达式进行字符串操作,且它们的匹配规则大同小异 。
5.3底层实现
实例分析:
给出一段字符串文本,请找出所有四个数字连在一起的子串===>分析底层实现
package li.regexp;import java.util.regex.Matcher;import java.util.regex.Pattern;//分析java的正则表达式的底层实现**public class RegTheory {public static void main(String[] args) {String content="1998年12月8日,第二代Java平台的企业版J2EE发布 。1999年6月,Sun公司发布了" +"第二代Java平台(简称为Java2)的3个版本:J2ME(Java2 Micro Edition,Java2平台的微型" +"版),应用于移动、无线9889+及有限资源的环境;J2SE(Java 2 Standard Edition,Java 2平台的" +"标准版),应用于桌面环境;J2EE(Java 2Enterprise Edition,Java 2平台的企业版),应" +"用于基于Java的应用服务器 。Java 2平台的发布,是Java发展过程中最重要的一个里程碑,标志着J" +"ava的应用开始普及 。3443";//请找出所有四个数字连在一起的子串//说明:// 1.\\d表示一个任意的数字String regStr="\\d\\d\\d\\d";//2.创建一个模式对象Pattern pattern = Pattern.compile(regStr);//3.创建匹配器//说明:创建匹配器matcher,按照前面写的 正则表达式的规则 去匹配 content字符串Matcher matcher = pattern.matcher(content);//4.开始匹配while (matcher.find()){System.out.println("匹配:"+matcher.group(0));}}}
day50-正则表达式01

文章插图
5.3.1match.find()
  • match.find()完成的任务:
  1. 根据指定的规则,定位满足规则的子字符串(比如1998)
  2. 找到后,将"1998"子字符串开始的索引记录到 matcher对象的属性 int[] groups数组中groups[0]=0 ;
? 把该子串的结束索引+1的值记录到 groups[1] = 4
day50-正则表达式01

文章插图
  1. 同时记录oldLast的值为 子串的结束索引+1 即4,这样做的原因是:下次执行find方法时,就从该下标4开始匹配
    day50-正则表达式01

    文章插图
5.3.2matcher.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();}根据传入的参数group=0,计算groups[0 * 2]=0 和 groups[0 * 2 + 1]=4 的记录的位置,从content截取子字符串返回

经验总结扩展阅读