Java——正则表达式

import java.util.regex.Pattern 正则表达式包

import java.util.regex.Matcher 文本匹配器包

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

作用2 :正则表达式可以在一段文字中查找满足要求的内容。

常用方法

java 复制代码
public String[ ]  matches(String regex) //判断是否与正则表达式匹配
public String replaceAll(String regex,String newStr) //按照正则表达式的规则进行替换
public String[ ] spilt(String regex) //按照正则表达式的规则进行切割字符串

一、校验字符串

1.1、字符类(只匹配一个字符)

注意:和用&&,或用|

java 复制代码
public class matchesTest {
	public static void main(String[] args) {
		// 一个大括号只能是一个字符
 
		// 只能是a b c
		System.out.println("a".matches("[abc]")); // true
		System.out.println("z".matches("[abc]")); // false
		System.out.println("ab".matches("[abc]")); // false
		System.out.println("ab".matches("[abc][abc]")); // true
 
		// 不能出现a b c
		System.out.println("a".matches("[^abc]")); // fasle
		System.out.println("zz".matches("[^abc]")); // fasle
 
		// a到z A到Z(包括头尾范围)
		System.out.println("b".matches("[a-zA-Z]")); // true
		System.out.println("0".matches("[a-zA-Z]")); // fasle
 
		// [a-d[m-p]] a到d 或者 m到p
		System.out.println("b".matches("[a-d[m-p]]")); // true
		System.out.println("e".matches("[a-d[m-p]]")); // fasle
 
		// [a-z&&[def]] a-z和def的交集
		// 细节:如果要求两个范围的交集 需要写&&
		// 如果写成了一个& 就不表示交集 只是单单一个符号而已
		System.out.println("a".matches("[a-z&&[def]]")); // true
		System.out.println("&".matches("[a-z&&[def]]")); // false
 
		// [a-z&&[^bc]] a-z 和 非bc 的交集
		System.out.println("a".matches("[a-z&&[^bc]]")); // true
		System.out.println("b".matches("[a-z&&[^bc]]")); // false
 
		// [a-z&&[^m-p]] a到z和除了m到p的交集
		System.out.println("a".matches("[a-z&&[^m-p]]")); // true
		System.out.println("m".matches("[a-z&&[^m-p]]")); // false
	}
}

1.2、预定义字符预定义字符(只匹配一个字符)

java 复制代码
public class matchesTest {
	public static void main(String[] args) {
		// \表示转义字符 :改变后面字符原本含义
		// 练习:以字符串形式打印一个双引号
		// System.out.println("\"");
 
		// .表示任意一个字符
		System.out.println("你".matches(".")); // true
		System.out.println("你a".matches("..")); // true
 
		// \\d 只能是任意一个数字
		// 简单来说 两个\表示一个\
		System.out.println("a".matches("\\d")); // fasle
		System.out.println("3".matches("\\d")); // true
		System.out.println("333".matches("\\d")); // fasle
		System.out.println("333".matches("\\d\\d\\d")); // true
 
		// \\w只能是一个单词字符 [a-zA-Z0-9]
		System.out.println("z".matches("\\w")); // true
		System.out.println("21".matches("\\w")); // false
		System.out.println("你".matches("\\w")); // fasle
		System.out.println("-".matches("\\w")); // true
 
		// 非单词字符
		System.out.println("你".matches("\\W")); // true
		// 以上正则表达式只能校验单个字符
	}
}

1.3、数量词

java 复制代码
public class matchesTest {
	public static void main(String[] args) {
		//必须是数字 字母 下划线 至少 6位
		System.out.println("2442fsfsf".matches("\\w{6,}")); //true
		System.out.println("244f".matches("\\w{6,}")); //false
		
		//必须是数字和字符 必须是 4位
		System.out.println("23dF".matches("[a-zA-Z0-9]{4}")); //true
		System.out.println("23_F".matches("[a-zA-Z0-9]{4}")); //false
		System.out.println("23dF".matches("\\w&&[^_]{4}")); //true
		System.out.println("23_F".matches("\\w&&[^_]{4}")); //fasle
	}
}

1.4、练习

java 复制代码
public class matchesTest {
	public static void main(String[] args) {
		 
		//手机号: 三部分
		//一、 1 表示手机号码只能由1开头
		//二、 [3-9] 表示手机号码第二位只能是3-9之间
		//三、\\d{9} 表示任意数字可以出现9次,也只能出现9次
		String regex1 = "1[3-9]\\d{9}";
		System.out.println("13112345678".matches(regex1)); //true
		System.out.println("131123456789".matches(regex1)); //fasle
		
		//座机号码: 三部分
		//一、区号: 0表示区号只能以0开头  
		//         \\d{2,3} 表示区号从二位开始可以是任意数字,可以出现2~3次
		//二、 -  ?表示次数  次数0次或者1次
		//三、 号码  第一位不能以0开头;从第二位开始可以为任意数字 ;号码总长度: 5-10位
		String regex2 = "0\\d{2,3}-?[1-9]\\d{4,9}";
		System.out.println("020-2324242".matches(regex2)); //true
		
		//邮箱号码 :三部分
		//一、 @左边  \\w+任意字符数字下划线至少出现一次就行
		//二、 @只能出现一次
		//三、   .的左边可以是字母和数字  [\\w&&[^_]]  任意字符数字总共出现2-6次  {2,6}
		//     .   \\.
		//     .的右边   所有的大写字母和小写字母 只能出现2-3次  [a-zA-Z]{2,3}
		String regex3 = "\\w+@[\\w&&[^_]]{2,6}\\.[a-zA-Z]{2,3}";
		System.out.println("zhangsan@163.com".matches(regex3)); //true
		
		//24小时
		String regex4 = "([01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d";
		System.out.println("23:11:11".matches(regex4)); //true
		
		String regex5 = "([01]\\d|2[0-3])(:[0-5]\\d){2}";
		System.out.println("23:11:11".matches(regex5)); //true
	}
}

二、爬虫

2.1、本地爬虫

2.1.1、带条件爬取

2.1.2、贪婪爬取和非贪婪爬取

2.2、网络爬虫

三、分组

3.1、捕获分组

3.2、非捕获分组

相关推荐
符哥20085 分钟前
C++ 进阶知识点整理
java·开发语言·jvm
小猪咪piggy5 分钟前
【Python】(4) 列表和元组
开发语言·python
Sayuanni%317 分钟前
初阶_多线程1(线程含义与关键属性)
java
程序媛徐师姐18 分钟前
Java基于微信小程序的模拟考试系统,附源码+文档说明
java·微信小程序·java模拟考试系统小程序·模拟考试微信小程序·模拟考试系统小程序·模拟考试小程序·java模拟考试小程序
難釋懷18 分钟前
Lua脚本解决多条命令原子性问题
开发语言·lua
CoderCodingNo26 分钟前
【GESP】C++ 二级真题解析,[2025年12月]第一题环保能量球
开发语言·c++·算法
疯狂敲代码的老刘27 分钟前
JDK 1.6到25 全版本网盘合集 (Windows + Mac + Linux)
java·linux·windows·macos·jdk
夕除29 分钟前
js--15
java·jvm·spring
独好紫罗兰30 分钟前
对python的再认识-基于数据结构进行-a005-元组-CRUD
开发语言·数据结构·python
曾经的三心草33 分钟前
redis-9-集群
java·redis·mybatis