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、非捕获分组

相关推荐
AIFQuant11 小时前
Java 对接全球股票实时报价:高可用架构与异常处理
java·开发语言·websocket·金融·架构·股票api
未若君雅裁11 小时前
Spring Bean 作用域、线程安全与生命周期
java·安全·spring
Huangjin007_11 小时前
【C++ STL篇(十)】深入理解 AVL 树:代码实现、旋转图解与平衡因子详解
开发语言·c++
奋斗的小乌龟11 小时前
langchain4j笔记-智能体系统01
java·笔记
wh_xia_jun11 小时前
用pom 的test 配置 与 jacoco
java·ide·intellij-idea
小明同学0111 小时前
C++后端项目:统一大模型接入 SDK(四)
服务器·开发语言·c++·计算机网络·chatgpt
阿丰资源11 小时前
基于Spring Boot的酒店客房管理系统
java·spring boot·后端
无籽西瓜a11 小时前
【西瓜带你学Kafka | 第八期】 Kafka的主从同步、消息可靠性、流处理与顺序消费(文含图解)
java·分布式·后端·kafka·消息队列·mq
布吉岛的石头11 小时前
Java 程序员第 18 阶段:实战Agent工作流:Java搭建自动化业务智能体
java·python·自动化
安妮的小熊呢12 小时前
CRMEB开源商城系统 & 标准版系统(PHP)开发规范
开发语言·javascript·php