最近学习编译原理,要用到正则表达式。本次要学习怎样用java正则表达式。正则表达式:可以用来搜索、编辑、处理文本。
简书:
类库
介绍
是一个用正则表达式所订制的方式来对字符串进行匹配工作的泛型包。其主要包括三个类:
Pattern类(编译)
Matcher类(解释与匹配)
PatternSyntaxException类(异常)
总的流程需要是这种:首先Pattern实例定制了一个正则表达式经编译后的方式,然后一个Matcher实例在这个Pattern实例的方式下进行字符串的匹配工作。下面将逐一击破!根据实际的事例来预测吧!假设目前我有这串文字:
"我的QQ是:123456我的电话是:10010我的学号是:2016210000"
现在我想使电脑帮我提取以上的所有数字,那能怎么办?如果没学过正则表达式,提取是非常复杂的!结尾告诉你怎么做!先来学学java的正则表达式的相关变量。
1.Pattern.split(CharSequence input)用于字符串分割我想电脑自动给我借助数字分割各个别这里应该使用到正则表达式代表的含义是:匹配字符串的每个地方的所有数字首先,可以借助方法建立一个正则表达式对象,然后借助分割。
可以看出通过数字分割出三个部分(不管你是哪个数字)2.Pattern.matches(String regex,CharSequence input)用于匹配到一次即中止,如果匹配了全部字符串返回true,否则返回false
可以看出匹配完返回true,没匹配完返回false。3.Pattern.matcher(CharSequence input)Pattern只能做简单的匹配操作,要想得到更强的匹配操作,得结合matcher类
Patternp=Pattern.compile(reg);
Matcherm=p.matcher(text);
通过以上方法可以形成出matcher类4. matcher下的方式①matches()对整个字符进行匹配,只有整个匹配才返回true
Patternp=Pattern.compile("\\d+");
Matcherm=p.matcher("22bb23");
System.out.println(m.matches());
//false
Matcherm2=p.matcher("2223");
System.out.println(m2.matches());
//true
②lookingAt() 对上面的字符进行匹配,只有匹配到的字符串在上面才返回true
Patternp=Pattern.compile("\\d+");
Matcherm=p.matcher("22bb23");
System.out.println(m.lookingAt());
//true
Matcherm2=p.matcher("aa2223");
System.out.println(m2.lookingAt());
//false
③find() 对数组串匹配java 正则表达式 版本号,找到就返回true,找不到就返回false(只遍历到第一个)
Patternp=Pattern.compile("\\d+");
Matcherm=p.matcher("22bb23");
System.out.println(m.find());
//true
Matcherm2=p.matcher("aa2223");
System.out.println(m2.find());
//true
Matcherm3=p.matcher("aa2223bb");
System.out.println(m3.find());
//true
Matcherm4=p.matcher("aabb");
System.out.println(m4.find());
//false
当matches、lookingAt、find执行匹配后,就可以运用下面三种得到最具体的信息。④start()返回匹配到子字符串中的初始位置
Patternp=Pattern.compile("\\d+");
Matcherm=p.matcher("aa22bb23");
System.out.println(m.find());
//返回true
System.out.println("position:"+m.start());
//索引到的初始位置为2
⑤end()返回匹配到子字符串的最后一个位置
Patternp=Pattern.compile("\\d+");
Matcherm=p.matcher("aa22bb23");
System.out.println(m.find());
//返回true
System.out.println("position:"+m.end());
//索引到的结束位置为4
⑥group()返回匹配到的子字符串
Patternp=Pattern.compile("\\d+");
Matcherm=p.matcher("aa22bb23");
System.out.println(m.find());
//返回true
System.out.println("text:"+m.group());
//子字符串为22
注意:这些方式的调用是有先后排序!这里再介绍一个 groupCount()方法,返回表达式有多少组。不是匹配到的组,是表达式匹配的组,有多少括号就有多少组。
Patternp=Pattern.compile("([a-z]+)(\\d+)");
Matcherm=p.matcher("a2223a");
System.out.println("groupCount1:"+m.groupCount());
//返回2
Patternp2=Pattern.compile("(\\d+)");
Matcherm2=p2.matcher("a2223a");
System.out.println("groupCount2:"+m2.groupCount());
//返回1
Patternp3=Pattern.compile("(([a-z]+)(\\d+))");
Matcherm3=p3.matcher("a2223a");
System.out.println("groupCount3:"+m3.groupCount());
//返回3
其实start()、end()、group()均有重构方法start(int i),end(int i),group(int i) 专用于分组操作start(int i)
Patternp=Pattern.compile("([a-z]+)(\\d+)");
Matcherm=p.matcher("123aa2223ccc123dd");
intcount=;
while(m.find()) {
count++;
System.out.println("第"+count+"次的start:"+m.start());
//匹配到的文本的索引
System.out.println("第"+count+"次的start(0):"+m.start());
//默认为匹配到整个文本的索引
System.out.println("第"+count+"次的start(1):"+m.start(1));
//默认为匹配到的文本的第一组的索引
System.out.println("第"+count+"次的start(2):"+m.start(2));
//默认为匹配到的文本的第二组的索引
}
end(int i)与start一样就不写了group(int i)
Patternp=Pattern.compile("([a-z]+)(\\d+)");
Matcherm=p.matcher("a2223ccc123");
intcount=;
while(m.find()) {
count++;
System.out.println("第"+count+"次的group:"+m.group());
//默认为匹配到的文本
System.out.println("第"+count+"次的group(0):"+m.group());
//默认为匹配到的整个文本
System.out.println("第"+count+"次的group(1):"+m.group(1));
//默认为匹配到的文本的第一组
System.out.println("第"+count+"次的group(2):"+m.group(2));
//默认为匹配到的文本的第二组
}
由以上的结果可以看出重构函数的i指的是表达式的组号,i为0默认为全局java 正则表达式 版本号,i为1为第一个,后面同理。使用知道完以上的函数,回到前面,要实现提取一串文字的所有数字可以如何用呢?
Stringreg="\\d+";
Stringtext="我的QQ是:123456我的电话是:10010我的学号是:2016210000";
Patternp=Pattern.compile(reg);
String[]str=p.split(text);
Matcherm=p.matcher(text);
intindex=;//标记
while(m.find()) {
System.out.print(str[index]);
System.out.println(m.group());
index++;
}
让我们来说说结果!
结合以上的分割函数,通过数字分割,得到文字,然后再借助匹配函数,找到字符串里的所有数字,依次输出。我也可以直接获得数字放进一个数组,这样我就存储起来了。当然这是很基础的,我可以添加多几个正则表达式,可以匹配标准具体的邮件,手机号,QQ号等。
参考链接:
- not end -
(我的学习笔记)
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-135744-1.html