正则表达式:是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串
其实就是一种规则,有自己特殊的应用
最大的用途就是做数据校验
学习目标是能看懂别人使用的正则表达式
自己写的规则并不能覆盖好所需的部分
1. Pattern类
正则表达式的组成规则
1)字符
x 字符x
\\ 反斜线字符
\r 回车符
\n 换行符
2)字符类
[abc] a、b或c
[^abc] 任何字符,除了a,b,c
[a-zA-z] a到z A到Z
[0-9] 包括0到9的字符
3)预定义字符类
. 任何字符 如果想表示字符. 写出\\.
\d 表示数字0到9
\w 单词字符[a-zA-Z_0-9]它们是标准命名的东西
4)边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界,就是指这里出现的不能是单词字符
5)数量词
X? X,一次或一次也没有
X+ X,一次或多次
X{n} X,恰好n次
X{n,} X,至少n次
X{n,m} X,至少n次,但是不能超过m次
6)组的概念(按照小括号从左开始编号,每一个对应着一个组)
(a(b(c)d(e)))
第一组:a(b(c)d(e))
第二组:b(c)d(e)
第三组:c
第四组:e
将来我们就可以通过编号来获取组中的元素,组0代表表达式
2. 正则表达式的判断功能
String类方法:public boolean matches(String regex):此字符串是否匹配给定的正则表达式
3. 正则表达式的分割功能
String类方法:public String[] split(String regex):根据给定正则表达式的匹配拆分此字符串
复杂的叠词切割
规则:xy y和x应该是同一个字符,并且y出现的次数是一次以上
在同一个字符串中,右边要想获取左边组中的内容,必须通过编号是没有错的
但是,这个编号前面必须加\字符
String regex = "(.)//1+"; 其中的1代表第一组,实际上也只有1个组
4. 正则表达式的替换功能
String类方法:public String replaceAll(String regex, String replacement)
使用给定的replacement替换此字符串所有匹配给定的正则表达式的子字符串
在替换功能中,我们想在第二个字符串中使用第一个规则中的组的内容
也是可以通过编号获取的,但是这个时候的前缀是$
String result = str.replaceAll(regex,"$1")
5. 正则表达式的获取功能
Pattern类:正则表达式的编译表示形式
指定为字符串的正则表达式必须首先编译为此类的实例(为了使用Pattern类的方法,才需要把正则
表达式编译为Pattern类的实例),
然后,可将得到的模式用于创建Matcher对象,该对象可以与任意字符序列匹配
典型的调用步骤:
1)Pattern p = Pattern.compile("a*b"); //把正则表达式编译成模式对象
*号表示a出现0次或多次
Pattern类没有构造方法,所以它有一个静态方法compile可以返回该类的对象
2)Matcher m = p.matcher("aaaaab"); //通过模式对象创建匹配器对象
3)boolean b = m.matches(); //调用匹配器对象的判断功能
如果仅仅是做判断,用普通的字符串类的成员方法也可以实现
之所以用这种方式,目的是使用Matcher类中的Find(判断)+Group(获取)功能获取功能,而字符串类并没有提供获取功能
实际应用案例:在网页上通过IO流技术从网络上抓取你想要的信息-->网络爬虫技术