正则表达式是一种对字符串进行处理的强大技术
不止是在java中,在其他语言中也有应用
代码
package com.chen.regexp;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*快速入门*/
public class Regexp {
public static void main(String[] args) {
String content="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平台。";
//
//创建一个Pattern对象,模式对象,可以理解成就是一个正则表达式对象,匹配模式就是传入的字符串
Pattern pattern = Pattern.compile("[a-zA-Z]+");
/* Pattern pattern = Pattern.compile("[0-9]+");*/
//创建一个匹配器对 Pattern pattern = Pattern.compile("[a-zA-Z]+");
//理解 :就是 matcher匹配器按照pattern(模式/样式) 到content中 匹配
//找到返回true,else false
Matcher matcher = pattern.matcher(content);
//循环匹配
while(matcher.find())
{
//匹配内容放到m.group(0);
System.out.println("找到: "+ matcher.group(0));
}
//1如果正则表达式有分组,如果没有就不会有group(0)之外的
//group(0)匹配到的全部字符串
//group(1) 第一组
//group(2)第二组
//。。。不能越界
//底层group
// 数组groups[0] 放字符串匹配到的起点
//groups[1]放字符串的终点+1;
//groups[2]放第一组的起点
//groups[3]放第一组的终点+1;依此类推,直到最后一组
}
}
patten中的字符串就是匹配模板
对于一些特殊的字符,我们在使用时要使用转义字符,因为有些符号有特殊意义,比如()这个符号就被用于表示“分组”了。
需要使用转义字符的:. * + ( ) $ / \ ? [ ] ^ { }
字符匹配符:
java正则表达式默认区分字母大小写,如何实现不区分大小写
加(?!)
(?!)abc表示abc 不区分大小写
a(?!)ba 表示 ba不区分大小写
选择匹配符:
限定符:
这些限定符对前面的第一个字符生效,当然可以用括号括起来,形成一个分组,然后对这个分组生效。
限定符
定位符
常用分组
下面的实际是对分组起了 一个别名,这样matcher就重写了一个一个方法,就是group( String name)方法提供了,可以通过别名获取分组的匹配结果,不只是只能通过“1 .2 3”这样的序号返回
分组结果。
这些是特殊的分组,这些 分组是不会被捕获的,也就是结果不会分组存在group是[1].gruo[2]...
中。
Pattern 正则表达式对象类
Pattern的matches方法:这个方法判断字符串是否是完全匹配,他在底层是创建matcher对象
调用了matcher的matches方法
取消默认的贪婪匹配
在字符串后面添加“+?”
例子:
String regStr="\\d+?";
分组、捕获、反向引用
反向引用:对于分组的我们可以在后面对它进行引用,这个分组是严格按照()来的,没有()
就是一个组。
String 中的很多方法都是支持正则表达式,如split(),replaceAll()方法,这样极大方便了我们进行编程。