目录
? ? ? ? ? ? ? ? 1、校验字符串是否满足规则
? ? ? ? ? ? ? ? 2、在一段文本中查找满足要求的内容(爬虫)
[abc] | 只能是a,b或c |
[^abc] | 除了这三个之外的任何字符 |
[a-zA-Z] | a-z,A-Z(字符串出现的字符只要在两个范围(包括z,Z)之内就为true) |
[a-d[m-p]] | a-d或者m-p |
[a-z&&[def]] | a-z和def的交集 |
[a-z&&[^bc]] | a-z和非def的交集(即:[ad-z]) |
[a-z&&[^m-p]] | a-z和除了m-p的交集(即:[a-[q-z]]]) |
System.out.println("&".matches("[a-z&&[def]]"));//false
System.out.println("&".matches("[a-z&[def]]"));//true
?
. | 任何字符 |
\d | 一个数字[0-9] |
\D | 非数字:[^0-9] |
\s | 一个空白字符:[\t\n\x0B\f\r] |
\S | 非空白字符 |
\w | [a-za-Z_0-9]英文、数字、下划线 |
\W | [^\w]一个非单词字符 |
“\\”表示把\变成普普通通的\
System.out.println("你a".matches("."));//false
System.out.println("你a".matches(".."));//true
System.out.println("你".matches("\\w"));//false
System.out.println("你".matches("\\W"));//true
X? | X出现一次或零次 |
X* | X出现零次或多次 |
X+ | X出现一次或多次 |
X{n} | X出现正好n次 |
X{n,} | X出现至少n次 |
X{n,m} | X出现至少n次但不超过m次 |
? ? ? ? ? ? ? ? eg.有如下文本:Java自从95年问世,经历了很多版本,目前企业中用到的最多的是Java8和Java11,因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在不久Java17也会逐渐登上历史舞台。
? ? ? ? ? ? ? ? 要求:找出里面所偶的JavaXX。
代码如下:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class 爬虫demo {
public static void main(String[] args) {
String str = "Java自从95年问世,经历了很多版本,目前企业中用到的最多的是Java8和Java11,因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在不久Java17也会逐渐登上历史舞台";
//获取正则表达式的对象
Pattern p = Pattern.compile("Java\\d{0,2}");
//获取文本匹配器的对象
Matcher m = p.matcher(str);
//利用循环从头获取,寻找是否有满足规则的子串。
while(m.find()){
String s = m.group();
System.out.println(s);
}
}
}
运行结果如下:
Matcher m = p.matcher(str);
中的——m:文本匹配器的对象
str:大串
p:规则
m:要在str中找符合p规则的小串
m.find()会返回一个boolean类型的结果。如果没有,返回false。反之返回true,并在底层记录字串的起始索引和结束索引+1(+1之后再作为结束索引进行传递)
String s = m.group();————方法底层会根据find方法记录的索引进行字符串的获取:subString(起始索引,结束索引);包头不包尾(所以find方法在结束索引位置+1就很有必要)