Java——正则表达式

一.正则表达式

1.概述

正则表达式可以校验字符串是否满足一定的规则,并用来校验数据格式的合法性

我们可以把正则表达式理解为是一种规则,这种规则就是可以用来校验字符串

2.Pattern与Matcher

⑴概述

①Pattern类为正则表达式的编译表现形式

②Matcher类为Pattern对Character sequence(文本)执行匹配操作的引擎(文本匹配器)

⑵常见方法摘要

①Pattern类

aed5c2d0524b4a959517309a607ac8f1.png 

②Matcher类

c74f6f6dae2b4702851fd6b72a014725.png

3.正则表达式的常用构造摘要

正则表达式其实就是字符拼凑出来的规则

⑴字符类

其中表示对一个字符的匹配

aaea865b5ed74809bea1bec9c34a58dd.png

⑵预定义字符

其中表示对一个字符的匹配

ea2e10a452194e47a514c40571aa8f42.png

反斜线字符 ('\') 用于引用转义构造,同时还用于引用其他将被解释为非转义构造的字符。因此,表达式 \\ 与单个反斜线匹配,而 \{ 与左括号匹配

如图:若我要使用预定义字符,其中\\才表示上表的\

5bd5f9f7fb83412cb0f36c092ba1693c.png

⑶数量词

3e74a717835c4de0b5ade880cae9e571.png

4.正则表达式的作用

⑴校验字符串是否满足规则

字符串中定义了一个Matchers方法用来校验字符串是否满足给定的规则

boolean matches(String regex)

方法的底层就是调用的Pattern类中的marches方法

e5199408271a40ddb88cf5c0985ac7c1.png

⑵在一段文本中查找满足要求的内容(爬取数据)

如何在一段文本中查找满足要求的内容?

第一步:写好规则(正则表达式)

第二步:获取文本匹配器

第三步:利用文本匹配器从头开始读取,将符合要求的内容截取

第四步:获取截取的内容

利用这四步思路,我们看一下如何利用代码实现

①本地爬取

4aa807e5fa7e470cbc97c903fd5383e5.png

如图:我想要获取下面文本的关键词"路飞",我们定义规则然后调用方法

d6fe3c9302674ae68b87380321455bfc.png

 df5423726a0f4717b91efc2ead1a2c1a.png

②网络爬取

网络爬取就是在本地爬取的基础上多了个读取网络内容的要求

5e5098a340854bcfaa0fc215b764355f.png

5.正则表达式在字符串中的使用

37fadcdc91f940a4a0cebde94c1f299f.png

replaceAll其中的regex是正则表达式,newStr是要替换的内容

b8bc24c4859e4971a7d6bfd44e2cbe26.png

6.爬虫

⑴贪婪爬取

在爬取的时候尽可能的多获取数据

Java中默认的是贪婪爬取,数量词+或*就表示贪婪爬取

如图:我想要尽可能的多获取b

d681b6b5049a4307b53a26e89cc2849d.png

⑵非贪婪爬取

在爬取的时候尽可能的少获取数据

在Java中默认的是贪婪爬取,如果我们在数量词+或*的后面加上问号,就表示非贪婪爬取

4f2b895d508a4544b8a81dc409024540.png

⑶带条件的爬取

带条件的爬取就是我们可以一次性爬取到不同的内容

如:一段文本中包含"a1","a2","a3"等等关键词,我想要统计其中aX出现的个数,就可以定义正则

a(?:1|2|3)

8ae11f5e7481430f8a48f33d8edccdb3.png

ecb921af1d984c299c9833ca5a9536c4.png

7.组和捕获

⑴捕获分组

捕获分组就是把这一组的数据捕获出来,再用一次

Ⅰ.规则

捕获组可以通过从左到右计算其开括号来编号

规则1:从1开始连续不间断

规则2:以左括号为基准,最左边的是第一组,其次是第二组,以此类推

Ⅱ.组的使用

正则内部使用:\\组号

如图:我要判断一个字符串的开始字符与结束字符是否一致

c0f5ce5987c144599c00072cc37c6e80.png

正则外部使用:$组号

如图:我要去除文本中的重复字符

d2591cca26c34692a755786368d0559a.png

⑵非捕获分组

分组之后不需要再使用本组数据,仅仅是把数据括起来

以(?)开头的组是纯的非捕获分组,也就是我们不能再去调用该正则表达式

上面的(?:) ,(?!)以及(?=)均是非捕获分组

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汤姆大聪明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值