Day31-C:\Users\Lenovo\Desktop\note\code\JavaSE\Basic\src\com\Regex-正则表达式+爬虫

news/2025/11/5 17:13:12/文章来源:https://www.cnblogs.com/David0919/p/19194212

正则表达式

image-20251104140210317

image-20251104163925972

package Basic.src.com.Regex;public class RegexDemo1 {public static void main(String[] args) {/*校验QQ号是否正确* 规则:6位及20位之内,0不能在开头,必须全部是数字* 先使用目前所学的知识完成校验需求* 然后体验一下正则表达式*/String qq = "1234567890";//System.out.println(checkQQ(qq));System.out.println(qq.matches("[1-9]\\d{5,19}"));}public static boolean checkQQ(String qq) {//规则:6位及20位之内,0不能在开头,必须全部是数字//核心思想://先把异常数据进行过滤//下面的就是满足要求的数据了。int len = qq.length();if (len < 6||len>20){//先异常判断return false;}//0不能开头if(qq.startsWith("0")){return false;}//必须全部是数字for (int i = 0; i < qq.length(); i++) {char c = qq.charAt(i);//charAt(i) 是 String 类的一个实例方法,作用是获取字符串中指定索引位置的字符。if (c < '0' || c > '9') {//字符单引号比较,比较的是字符的ASCII码值return false;}}return true;}
}
package Basic.src.com.Regex;public class RegexDemo2 {public static void main(String[] args) {//只能是abcSystem.out.println("==========1===========");System.out.println("a".matches("[abc]"));//trueSystem.out.println("z".matches("[abc]"));//falseSystem.out.println("ab".matches("[abc]"));//false,意思是[]中的内容只能出现一个System.out.println("ab".matches("[abc][abc]"));//true//不能出现abcSystem.out.println("==========2===========");System.out.println("a".matches("[^abc]"));System.out.println("z".matches("[^abc]"));System.out.println("zz".matches("[^abc]"));System.out.println("zz".matches("[^abc][^abc]"));//a到z,A到Z(包括头尾的范围)System.out.println("==========3===========");System.out.println("a".matches("[a-zA-z]"));//trueSystem.out.println("z".matches("[a-zA-z]"));//trueSystem.out.println("aa".matches("[a-zA-z]"));//falseSystem.out.println("zz".matches("[a-zA-z]"));//falseSystem.out.println("zz".matches("[a-zA-z][a-zA-z]"));//trueSystem.out.println("0".matches("[a-zA-z]"));//falseSystem.out.println("0".matches("[a-zA-z0-9]"));//true//[a-d[m-p]]System.out.println("==========4===========");System.out.println("a".matches("[a-z[m-p]]"));//trueSystem.out.println("d".matches("[a-z[m-p]]"));//trueSystem.out.println("m".matches("[a-z[m-p]]"));//trueSystem.out.println("p".matches("[a-z[m-p]]"));//trueSystem.out.println("e".matches("[a-z[m-p]]"));//falseSystem.out.println("0".matches("[a-z[m-p]]"));//false//[a-z&&[^bc]] a-z和def的交集。为:d,e,f//细节:如果要求两个范围的交集需要写两个符号&&//如果写成了一个&,那么此时的&就表示的不是交集了,而是简简单单的&符号,没有任何含义System.out.println("==========5===========");System.out.println("a".matches("[a-z&[def]]"));//trueSystem.out.println("&".matches("[a-z&[def]]"));//trueSystem.out.println("&".matches("[a-z&&[def]]"));//falseSystem.out.println("d".matches("[a-z&&[def]]"));//trueSystem.out.println("a".matches("[a-z&&[def]]"));//false//[a-z&&[^bc]]   a-z和非bc的交集。(等同于[ad-z])System.out.println("==========6===========");System.out.println("a".matches("[a-z&&[^bc]]"));//trueSystem.out.println("b".matches("[a-z&&[^bc]]"));//falseSystem.out.println("0".matches("[a-z&&[^bc]]"));//false//[a-z&&[^m-p]]  a到z和除了m到p的交集,等同于[a-lq-z]System.out.println("==========6===========");System.out.println("a".matches("[a-z&&[^m-p]]"));//trueSystem.out.println("m".matches("[a-z&&[^m-p]]"));//falseSystem.out.println("0".matches("[a-z&&[^m-p]]"));//false}
}
package Basic.src.com.Regex;public class RegexDemo3 {public static void main(String[] args) {//   \转义字符  改变后面那个字符原本的含义//练习:以字符串的形式打印一个双引号//此时这里的\是转义字符,改变了后面那个''双引号原本的含义//把它变成了一个普通的双引号而已//  \\第一个\是转义字符,改变了后面那个\原本的含义System.out.println("\"");//.表示任意一个字符System.out.println("你".matches("."));//trueSystem.out.println("你".matches(".."));//falseSystem.out.println("你a".matches(".."));//true//  \d表示任意的一个数字,所以\\d在java中要这么表示//简单记就是两个\\表示一个\System.out.println("a".matches("\\d"));//falseSystem.out.println("3".matches("\\d"));//trueSystem.out.println("333".matches("\\d"));//falseSystem.out.println("333".matches("\\d\\d\\d"));//true//  \\w只能是单词字符[a-zA-Z_0-9]System.out.println("z".matches("\\w"));//trueSystem.out.println("2".matches("\\w"));//trueSystem.out.println("21".matches("\\w"));//falseSystem.out.println("你".matches("\\w"));//falseSystem.out.println("_".matches("\\w"));//true//  \\W非单词字符System.out.println("你".matches("\\W"));//trueSystem.out.println("======================================");//必须是数字 字母 下划线 至少六位System.out.println("2442fsfsf".matches("\\w{6,}"));//trueSystem.out.println("24sf".matches("\\w{6,}"));//false//必须是数字和字符 必须是四位System.out.println("23dF".matches("a-zA-Z0-9{4}"));//trueSystem.out.println("23_F".matches("a-zA-Z0-9{4}"));//falseSystem.out.println("23dF".matches("[\\w&&[^_]]{4}"));//trueSystem.out.println("23_F".matches("[\\w&&[^_]]{4}"));//false}
}
package Basic.src.com.Regex;public class RegexDemo4 {public static void main(String[] args) {/** 需求* 13112345678   13712345667     13945679027     139456790271* 020-2324242     02122442     027-42424    0712-3242434* 3232323@qq.com    zhangsan@itcast.cnn     dlei0009@163.com    dlei0009@pci.com.cn* *///心得:从左到右一个个看//第一部分:1表示手机号码只能以1开头//第二部分:[3-9],表示手机号码第二位只能是3-9之间//第三部分:\\d{9} 表示任意数字可以出现且仅可以出现9次System.out.println("================手机号码====================");String regex1 = "1[3-9]\\d{9}";System.out.println("13112345678".matches(regex1));System.out.println("13712345667".matches(regex1));System.out.println("13945679027".matches(regex1));System.out.println("139456790271".matches(regex1));System.out.println("================座机号码====================");//一:区号  0[1-9]{2,3}//0表示一定是以0开头//[1-9]{2,3}:表示区号从第二位开始可以是任意的1-9,且可以出现2-3次//二:-?次数0次或1次//三:总长度5-10位String regex2 = "0[1-9]{2,3}-?[1-9]\\d{4,9}";System.out.println("020-2324242".matches(regex2));System.out.println("02122442".matches(regex2));System.out.println("027-42424".matches(regex2));System.out.println("0712-3242434".matches(regex2));//3232323@qq.com    zhangsan@itcast.cnn     dlei0009@163.com    dlei0009@pci.com.cn//第一部分:@的左边 \\w+:任意的字母或者下划线至少可以出现一次//                  \\w:[a-z    A-Z     0-9]//第二部分:@只能出现一次//第三部分:再分三小段//3.1   .的左边[\\w&&[^_]]{2,6}表示任意字符去掉下划线,总共出现2-6次//3.2   .需要转义\\.第一个\转义了第二个,使得第二个才是转义.的  \\.//3..3  大写字母跟小写字母都可以,只能出现2-3次   [a-zA-Z]{2,3}//把3.2和3.3看作一组,可以反复出现1-2次System.out.println("================邮箱====================");String regex3 = "\\w+@[\\w&&[^_]]{2,6}(\\.[a-zA-Z]{2,3}){1,2}";System.out.println("3232323@qq.com".matches(regex3));System.out.println("zhangsan@itcast.cnn".matches(regex3));System.out.println("dlei0009@163.com".matches(regex3));System.out.println("dlei0009@pci.com.cn".matches(regex3));//实际开发中很少会自己写正则表达式//百度一个类似的,改成自己想要的//String regex4 = "/^(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d$/";^和$表示从开头到末尾,但是java的matchs是默认的 ?:String regex4 = "([01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d";//[01]\d|2[0-3]     |是或者的意思System.out.println("23:11:11".matches(regex4));System.out.println("00:00:00".matches(regex4));String regex5 = "([01]\\d|2[0-3])(:[0-5]\\d){2}";System.out.println("23:11:11".matches(regex5));}
}

分组

image-20251105155508657

捕获分组

package Basic.src.com.Regex;import java.util.regex.Pattern;public class RegexDemo12 {public static void main(String[] args) {//判断始末是否一致//\\:表示组号,表示把第x组的内容拿出来再用一次String regex1 = "(.).+\\1";System.out.println("a123a".matches(regex1));System.out.println("b456b".matches(regex1));System.out.println("17891".matches(regex1));System.out.println("&789&".matches(regex1));System.out.println("a123b".matches(regex1));//falseSystem.out.println("================================");String regex2 = "(.+).+\\1";System.out.println("abc123abc".matches(regex2));System.out.println("b456b".matches(regex2));System.out.println("123789123".matches(regex2));System.out.println("abc123abd".matches(regex2));//falseSystem.out.println("================================");//一致:捕获分组//*表示0次或多次//(.)   把首字母看作一组//\\2*  首字母看作一组,且可再出现0次或多次String regex3 = "((.)\\2*).+\\1";System.out.println("aaa123aaa".matches(regex3));System.out.println("b456b".matches(regex3));System.out.println("111123111".matches(regex3));System.out.println("&&abc&&".matches(regex3));System.out.println("aaa123aab".matches(regex3));}
}

口吃替换

package Basic.src.com.Regex;public class RegexDemo13 {public static void main(String[] args) {String str  = "我要学学学编编编编程程程程程";//把重复的内容替换为单个的//(.)表示把重复内容中的第一个字符看做一组String res = str.replaceAll("(.)\\1+", "$1");//replace不识别正则表达式System.out.println(res);
//$1指的是正则表达式子外,也就是前面的正则表达式里面的第一组拿出来用}
}

image-20251105163306572

package Basic.src.com.Regex;public class RegexDemo14 {public static void main(String[] args) {/** 身份证号码:* 41080119930228457x* 510801197609022309* 15040119810705387X* 130133197204039024* 430102197606046442* *///非捕获分组:仅仅把数据括起来//比如(?:\d|X|x)      (?=\d|X|x)      (?!\d|X|x)//(?:\d|X|x)用的多一点//特点:不占用组号String regex = "[1-9]\\d{16}(?:\\d|X|x)";}
}

image-20251105164623780

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/956971.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在 Ubuntu 中创建一个拥有 root 权限的 mjroot 用户并禁用root用户

在 Ubuntu 24.04.2 LTS 中创建一个拥有 root 权限的 mjroot 用户并禁用原始 root 用户,可按以下步骤操作: 1. 创建 mjroot 用户 # 创建 mjroot 用户 sudo adduser mjroot 执行后会提示设置密码和用户信息(可按回车留…

Mac微信4.0版本多开(暂不支持防撤回)

这次4.0的升级引入了保护机制,数据库、函数名等都不一样了 版本适用:Mac 端,微信 4.0 以上版本GitHub:https://github.com/LiJunYi2/WeChat-Split

2025年低烟无卤电缆加工厂权威推荐榜单:屏蔽电缆/计算机电缆/智能电缆源头厂家精选

随着社会对公共安全与环保要求的不断提高,低烟无卤电缆作为新一代安全线缆,其市场需求显著增长。这类电缆以其出色的阻燃特性、低烟密度与无卤环保配方,在火灾情况下能有效抑制烟雾产生和有毒气体释放,广泛应用于高…

2025年度三维扫描系统品牌推荐,结构光与非接触式三维扫描仪企业全解析

在工业检测、文物保护、逆向工程等领域,三维扫描技术正成为数字化转型的核心驱动力。面对市场上纷繁复杂的三维扫描设备与服务商,如何选择适配自身需求的三维扫描系统?本文聚焦[关键词](三维扫描系统、结构光三维扫…

2025 年 11 月立式车床,双主轴立车车床,双主轴双刀塔车铣复合车床厂家最新推荐,技术实力与市场口碑深度解析!

引言 随着高端制造领域对精密加工设备需求的持续攀升,立式车床、双主轴立车车床及双主轴双刀塔车铣复合车床的性能与品质愈发受到关注。为助力企业精准筛选优质设备供应商,专业机床协会联合第三方检测机构开展了 202…

CF1272F Two Bracket Sequences

考虑设 \(f_{i, j, k}\) 表示在 \(s\) 中匹配到 \(i\),在 \(t\) 中匹配到 \(j\),有 \(k\) 个左括号没有匹配。 然后用 BFS 进行匹配,能保证长度时最小的。

低功耗LCD段码液晶驱动 VKL144A/B LCD驱动厂家

VKL144A/B是一个点阵式存储映射的LCD驱动器,可支持最大144点(36SEGx4COM)的LCD屏。单片机可通过I2C接口配置显示参数和读写显示数据,可配置4种功耗模式,也可通过关显示进入省电模式。其高抗干扰,低功耗的特性适用…

在Delphi中使用连接池连接MSSQL数据库和不使用连接池连接数据库的有什么区别

以下是完整的Delphi数据库连接池实现代码,包含初始化、连接获取和使用示例:1. 连接池初始化单元 (uDBPool.pas)unit uDBPool;interfaceusesFireDAC.Comp.Client, FireDAC.Stan.Def;procedure InitConnectionPool; fu…

Go红队开发—图形化界面

Go红队开发—Gui图形化界面(Fyne库)目录GUi 图形化配置第一个GUI常用 widget 组件Layout 布局绝对布局dialog弹框注意事项类别案例demo所有代码 好久没做golang开发了,之前的文章一直在做cli的安全工具开发,这里了解…

使用FireDAC的TFDManager和TFDConnection组件实现运行时动态数据库连接

以下是一个通用的数据库连接方案,使用FireDAC的TFDManager和TFDConnection组件实现运行时动态数据库连接。支持多种数据库类型,采用面向对象封装:unit DatabaseManager;interfaceusesSystem.SysUtils, System.Class…

laas paas saas 架构说明

--------------------------------------------------------------------------------------------------------------------------- 在 Java 开发领域,IaaS、PaaS、SaaS 分别对应基础设施、平台、软件三个层级的服务…

Delphi RESTful API

服务器 第一步: 创建Delphi REST服务器(使用WebBroker或DataSnap,这里使用WebBroker)在 Delphi 中创建 "Stand-alone Web Server Application" 将 API 代码粘贴到 WebModule 中 设置端口(默认为 8080)…

TFDMemTable 是断开性数据集

TFDMemTable 是断开性数据集,数据存储在内存中,无需实时连接数据库它适用于缓存数据、离线操作、临时数据处理等场景 虽然 TFDMemTable 是断开性的,但它仍然可以通过 TFDQuery 等组件与数据库进行数据交互

2025年河南公共走廊全钢防火隔断公司权威推荐榜单:商场全钢防火隔断/公共走廊防火隔断/公共走廊防火隔墙源头厂家精选

在商业建筑、学校、医院等公共空间,全钢防火隔断作为保障人员安全疏散的关键设施,其防火性能与结构稳定性直接关系到生命财产安全。根据建筑防火行业统计,2025年国内防火建材市场规模预计突破800亿元,其中全钢防火…

2025年板式换热机组制造厂权威推荐榜单:容积式换热机组/热力机组/换热机组源头厂家精选

在工业节能改造与区域能源管理加速推进的背景下,板式换热机组凭借其高效传热、紧凑结构及智能控制等优势,已成为区域供暖、化工流程及建筑能源系统的核心装备。根据行业数据统计,2025年国内换热机组市场规模预计突破…

十四.JavaScript 简介及导入方式

十四.JavaScript 简介及导入方式 定义:JS导入方式:有两种 显示:Fn+F12-->Console内联(script)外联:创建.js文件-导入.js文件基本输入输出: 打印到控制窗口:console.log() 显示到下拉框:alert() 十五.Java…

2025 年 11 月音乐喷泉工程,景区互动音乐喷泉,彩色灯光音乐喷泉厂家最新推荐,聚焦资质、案例、售后的五家机构深度解读!

引言 近期,专业景观行业协会针对音乐喷泉工程、景区互动音乐喷泉、彩色灯光音乐喷泉领域开展了 2025 年度厂家测评工作,本次测评覆盖行业内百余家主流企业,通过资质审核、技术实力评估、项目案例考察、售后服务调研…

11.5 NOIP 模拟赛 T1. 荣耀

思路 \(f(n)\): \(n\) 个位置中 \(0\) 号勋章出现偶数次的方案数 \(g(n)\): \(n\) 个位置中 \(0\) 号勋章出现奇数次的方案数 \[f(n) = m \cdot f(n-1) + g(n-1) \\ g(n) = f(n-1) + m \cdot g(n-1) \]可以 \[\begin{b…

智能体自动化 ui 测试

智能体自动化 ui 测试

Windows开机自动播放视频设置

打开计划任务程序 有两种方法打开输入命令 运行输入taskschd.msc开始菜单 Windows管理工具-计划任务程序设置开机任务 创建任务设置任务名称设置触发器 需设置延迟任务时间否则可能开机页面闪一下但是不启动设置操作启…