(JAVA) 常用API-正则表达式,爬虫,分组

正则表达式

能够用来校验字符串是否满足一定的规则

举个例子

//6-20位之间,0不能开头,必须全是数字
String qq="12345678"
qq.matches("[1-9]\\d{5,19}")//返回结果为布尔类型

(?!)x可以忽略x的大小写

也可以自动生成正则表达式

爬虫

java.until.regex.Patern:表示正则表达式

java.until.regex.Matcher:文本匹配器,按照正则表达式的规则去读取字符串,大串中找符合规则的字串

String str="abcdefgh"//要查找的对象
Patern p=Pattern.complie("正则表达式规则")//获取正则表达式对象
Matcher m=p.macher(str);//获取文本匹配器的对象在str中找符合p规则的字串
m.find();//重头开始读取,如果无,返回false,有返回ture,同时在底层记录其实地址和结束地址+1;
String s1= m.group();//截取字串
//因此可以写成循环来读取串中所有符合的对象
while(m.find)
{
String s1= m.group();
print(s1);
}

带条件爬取

"((?i)Java)(?=8|11)"

爬取的带数字8|11的java,只输出java

"((?i)Java)(?:8|11)"

爬取的带数字8|11的java,只输出java+数字

"((?i)Java)(?!8|11)"

爬取的不带数字8|11的java

abbbbbbbaaa;

ab+

贪婪爬取:在爬取尽可能多获得数据

abbbbbb

ab+?

非贪婪爬取:尽可能少获取数据

ab

正则表达式在字符串

public String replaceAll(String regex,String newStr)

将符合规则的字符用newStr替代

public String split(String regex)

按照正则表达式规则切割字符串

分组

分组就是小括号,每一组有组号,以左括号划分组号,依次递增

例如上图中圈起来的括号中的\\d+是第二组

捕捉分组

把一组数据分组捕捉起来,再用一次

内部使用:\\组号 

表示把第x组的内容再用一次

示例1:判断字符开始部分和结束部分是否一致?

String regex1="(.).+//1";
System.out.println("a123a".matches(regex1));//true

示例2:判断字符开始部分和结束部分是否一致?开始部分内部每个字符也要一致

Srring regex2="((.)\\2).+\\1";
System.out.println("aaa123aaa".matches(regex2))//true

外部使用:$

示例

str="abcdddd";
System,out.println(str.replaceAll("(.)\\1+","$1"));//abcd

非捕获分组

分组后不需要再用本组数据,仅仅是将数据括起来,不占用组号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值