**
正则表达式
**
给定一个正则表达式和另外一个字符串,可以达到比对的目的
1、给定的字符串完全符合正则表达式的过滤逻辑(成为匹配)
全匹配 matches
部分匹配 lookingAt
2、可以通过正则表达式,从字符串中获取我们想要的特定的部分find
比如:爬虫
读取网络中的数据,获取我们想要的部分
规则:
. 任意单个字符
^ 开始
$ 结束
[abc] 匹配单个字符 a或者b或者c
[a-z] 匹配单个字符 a - z之间的任何一个
a|b 要么a,要么b
[^abc] 匹配单个字符,除了a,b,c之外任何单个字符都可以
\s 空格
\b 单词边界
\d [0-9]
\w [a-zA-Z0-9]
数量词:
? 0次或者1次
+ 1-n
* 0-n
{n} n次
{n,} n次以上
{n,m} n-m次
//创建Pattern对象,设置字符串的规则
//a*:任意多个a
//b:只能是一个b
Pattern p = Pattern.compile("a*b");
//创建Matcher对象,接收一个字符串,然后进行匹配
Matcher m = p.matcher("aaaaaab");
//判断是否能够匹配成功
boolean b = m.matches();
System.out.println(b);
//以上三行代码可以简写为:
boolean flag = Pattern.matches("正则表达式规则","需要匹配的字符串");
}
捕获组
捕获组可以通过从左到右计算其开括号来进行编号
比如:表达式(A)(B(c))中,存在四种组合
0 (A)(B(C))
1 (A)
2 (B(C))
3 (C)
//定义一个匹配规则的对象,将匹配的规则赋值在内
Pattern p = Pattern.compile("(Z)(A(M))(B(C(D)))");
//定义一个匹配器对象,然后将字符串内容赋值在内
//尝试将整个区域与模式进行匹配。
Matcher m = p.matcher("ZAMBCD");
//匹配的组的数量统计
System.out.println(m.groupCount());
//循环去回去到这些组
while (m.find()){
System.out.println(m.group(0));
System.out.println(m.group(1));
System.out.println(m.group(2));
System.out.println(m.group(3));
System.out.println(m.group(4));
System.out.println(m.group(5));
System.out.println(m.group(6));
String类型中已经提供了进行正则表达式的方法
replaceAll()
public static void main(String[] args) {
String s = "13233335879";
String s1 = s.replaceAll("(\\d{3})(\\d{4})(\\d{4})","$1****$3");
System.out.println(s1);
//$1:132
//$2:3333
//$3:35879
//将多个重复的元素替换掉
String str = "我我我我喜喜喜喜喜欢欢你你你你";
//$1:取第一个括号中的元素 (.)
//\1只留一个
String s2 = str.replaceAll("(.)\\1+","$1");
System.out.println(s2);
// \1在正则表达式中,从左往右数,第一个左边括号对应的括号内的内容
// 以此类推,\2表示第二个内容 \0表示整个表达式
}
boolean matches(String regex):告诉这个字符串是要进行一个正则表达式的匹配
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你的手机号:");
String phone = scanner.next();
//创建一个匹配器的解释器,将手机号的正则表达式放在里面
Pattern p = Pattern.compile("1[3-9]\\d{9}");
//准备一个boolean类型的变量,用来接收你比对后的结果
Matcher m = p.matcher(phone);
boolean b = m.matches();
if(b){
System.out.println("你的手机号是:" + phone);
}else{
System.out.println("你输入的手机号是错误的,请重新输入");
}
}