正则表达式初学
正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式(规则)的文本。
说简单点,就是我们可以利用正则表达式来处理文本,比如查找文本中love这个单词出现了几次,把文本中的‘爱’全部替换成love
都可以用正则表达式来快速完成。
结合代码具体讲
以要查找文本中的四位数字为列
1、编辑一个正则表达式,得到一个模式对象
2、模式对象与你的文本相匹配,得到一个匹配器(里面装有匹配到的内容)
3、匹配器调用find方法看是否找到,找到就再调用group方法输出找到的内容
public class RegEx01 {
public static void main(String[] args) {
String content="1324 hello my love 3456 will still forever";
//1.正则表达式,\\d表示0~9的任意一个数字
String regex="\\d\\d\\d\\d";//表示一个四位数字,学习正则表达式语法就懂
//2.创建模式(pattern)对象,编译编辑(compile)一个正则表达式(pattern)
Pattern pattern = Pattern.compile(regex);
//3.模式匹配文本(得到一个匹配器)
Matcher matcher = pattern.matcher(content);
while(matcher.find()){
//System.out.println("找到了: "+matcher.group());
System.out.println("找到了: "+matcher.group(0));
}
}
}
debug详讲
此时我们可以看到确实创建了一个模式pattern,里面放的是正则表达式;也创建了一个匹配器,注意此时匹配器里group数组没有放有效数据
进入到matcher的find方法里面,find返回一个布尔值,即找到所需内容返回true,否则返回false
执行完find方法后,已经找到了数据并把数据记录在了匹配器matcher的group数组里(注意这里记录的是数据的索引下标)(可通过下面的test和索引下标得到数据)
我们发现group方法底层为substring方法,通过下标索引来返回原字符串。
比如这里的0~4索引下标是返回下标为 0~3的字符串(即四位数),看jdk文档
追溯源码后一切就明了了
1、 先创建了一个模式对象pattern(即正则表达式)和一个匹配器matcher
2、matcher调用find方法判断有没有找到所需数据,若找到就,把数据索引下标存到matcher的groups数组
3、matcher调用group方法找到group区间(groups[group * 2], groups[group * 2 + 1]),即groups[0]和groups[1],找到里面存的数据下标0和4,底层调用substring方法还原出所需字符串
更多源码追溯看下回~~~