正则表达式(regular expression) ->regexp
很多编程语言都支持正则表达式
\d表示一个任意的数字
示例
String content = "1994年6、7月间,在经历了一场历时三天的讨论之后,团队决定" +
"再一次改变了努力的目标,这次他们决定将该技术应用于万维网。他们认为随着" +
"Mosaic浏览器的到来,因特网正在向同样的高度互动的远景演变,而这一远景" +
"正是他们在有线电视网中看到的。作为原型,帕特里克·诺顿写了一个小型万维网" +
"浏览器WebRunner。 [8] \n" +
"1995年,互联网的蓬勃发展给了Oak机会。业界为了使死板、单调的静态网页能够" +
"“灵活”起来,急需一种软件技术来开发一种程序,这种程序可以通过网络传播并且" +
"能够跨平台运行。于是,世界各大IT企业为此纷纷投入了大量的人力、物力和财力。" +
"这个时候,Sun公司想起了那个被搁置起来很久的Oak,并且重新审视了那个用软件" +
"编写的试验平台,由于它是按照嵌入式系统硬件平台体系结构进行编写的," +
"所以非常小,特别适用于网络上的传输系统,而Oak也是一种精简的语言," +
"程序非常小,适合在网络上传输。Sun公司首先推出了可以嵌入网页并且可以随同网页" +
"在网络上传输的Applet(Applet是一种将小程序嵌入到网页中进行执行的技术),并" +
"将Oak更名为Java(在申请注册商标时,发现Oak已经被人使用了,再想了一系列名字之后" +
",最终,使用了提议者在喝一杯Java咖啡时无意提到的Java词语)。5月23日,Sun公司在" +
"Sun world会议上正式发布Java和HotJava浏览器。IBM、Apple、DEC、Adobe、HP、" +
"Oracle、Netscape和微软等各大公司都纷纷停止了自己的相关开发项目,竞相购买了Java" +
"使用许可证,并为自己的产品开发了相应的Java平台。 [9-10] ";
Pattern pattern = Pattern.compile(str);
//创建匹配器matcher,按照正则表达式的规则去匹配content字符串
Matcher matcher = pattern.matcher(content);
//开始匹配
while(matcher.find()){
System.out.println("找到:"+matcher.group(0));
}
找到:1994
找到:1995
matcher.find()的作用:
(1)根据指定的规则,定位满足规则的子字符串(比如1994)
(2)找到后,将子字符串开始的索引的值保存在matcher的属性 int[] groups;
group[0[=0,将子字符串结束的索引+1的值记录到在group[1] = 4
(3)同时记录oldLast的值为子字符串结束的索引+1的值,即4,即下次执行find方法时,从4开始
group内部方法
/*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]=0和group[1]=4记录的位置,从content开始截取子字符串开始返回,就是【0,4),包含0但是不包含4
如果再次执行find方法,仍然按照上面分析来执行
当在正则表达式中有小括号时,就称为分组,一个括号称为一组
例如,
String str = "(\\d\\d)(\\d\\d)";
正则转义符
实现不区分大小写
(?i)abc 表示abc不区分大小写
a(?i)bc 表示 bc不区分大小写
a((?i)b)c 表示b不区分大小写
或者创建Patten对象时指定
[^abc] 表示不是abc中的任意一个字符
[abcd] 表示abcd中的任意一个字符
\d 匹配任意一个数字
\D匹配任意非数字
\w匹配任意英文字母,数字,下划线
\s匹配任何空白字符
.匹配\n之外的所有字符
|
java匹配是贪婪匹配,即尽量匹配多的
^写在[]内表示非,写在外面表示 起始字符
正则表达式三个常用类
反向引用