正则表达式_2

简介: 学习自编程胶囊课程。

分组

() 是有分组提取功能的。如提取电话号码可以/(\d{4})\-(\d{7})/,就会把1111-1111111的电话号码提取为11111111111

如果想使用分组的功能,但是又不想提取,就可以使用(?:)。如提取电话号码/(?:\d{4})\-(\d{7})/,就只会提取出后七位1111111

分组使用示例:提取日期

日期格式各种各样,如:

2022-05-09

2022-5-9

20220509

2022 5 9

2022.05.09

统一提取这些不同格式日期的方法:用[]处理年月日分隔处可能出现的字符。

(\d{4})[\-\. ]?(\d{1,2})[\-\. ]?(\d{1,2})[]里的内容表示分隔符可能是-,.,空格,还可能没有(用?处理)。

(\d{1,2})表示月日可能1位或2位。

分组的回溯引用

对于刚才分组得到的数据,可以通过反向引用来获取。

如查询 abcabc 式的数据:/(abc)(\1)/.

查询abcdefdefabc:/(abc)(def)(\2)(\1)/.

先行断言

或者叫环视、预搜索。

正向先行断言

(?=表达式),指在某个位置向右看,表示所在位置右侧必须能匹配表达式

如:/我爱(?=你)表示我爱右边必须要有你。

检验密码中必须要有大写和小写字母:

(?=.*?[a-z])(?=.*?[A-Z]).+

检验密码中必须要有大写小写字母、数字,长度还要>=8:

(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[0-9]).{8,}

反向先行断言

(?!表达式),指在某个位置向右看,表示所在位置右侧必须不匹配表达式

如:/我爱(?!你)表示我爱右边必须没有你。

正向后行断言

(?>=表达式),从右往左看。

如:(?<=我)爱你表示爱你左边必须有我。

反向后行断言

(?>!表达式)

如:(?<!我)爱你表示爱你左边必须没有我。

例题

匹配质数个x。如xx,xxx,xxxxx。

首先,质数只能被1和它自身整除。所以只需要排除掉可以被2整除,被3整除,被4整除……的数即可。也就是2以上的数字要重复出现两次以上。
出现2以上的数字次数的x是(..+),但是不能用(..+)+,因为+号并不保证每次括号内的字符数相同(可能是2+3+4+……)。所以要用\1反向引用(..+),再让\1重复出现1次以上,因此(..+)\1+就是任意一个>2的数* 任意一个>=2的数,涵盖了所有合数。
最后取反,再限制一下行首行尾就能得出所有质数。有一个小问题好像这样会把x也看做质数。

因此答案是:^(?!(..+)\1+$).

目录
相关文章
为ps1脚本文件添加数字签名
再win11环境下为PowerShell脚本文件进行数字签名
|
12月前
|
机器学习/深度学习 人工智能
SNOOPI:创新 AI 文本到图像生成框架,提升单步扩散模型的效率和性能
SNOOPI是一个创新的AI文本到图像生成框架,通过增强单步扩散模型的指导,显著提升模型性能和控制力。该框架包括PG-SB和NASA两种技术,分别用于增强训练稳定性和整合负面提示。SNOOPI在多个评估指标上超越基线模型,尤其在HPSv2得分达到31.08,成为单步扩散模型的新标杆。
495 10
SNOOPI:创新 AI 文本到图像生成框架,提升单步扩散模型的效率和性能
|
存储 监控 算法
|
文字识别 算法 API
视觉智能开放平台产品使用合集之人脸识别离线SDK支持离线识别吗
视觉智能开放平台是指提供一系列基于视觉识别技术的API和服务的平台,这些服务通常包括图像识别、人脸识别、物体检测、文字识别、场景理解等。企业或开发者可以通过调用这些API,快速将视觉智能功能集成到自己的应用或服务中,而无需从零开始研发相关算法和技术。以下是一些常见的视觉智能开放平台产品及其应用场景的概览。
174 0
|
XML Java 数据格式
jsp标签上
jsp标签上
103 0
Echarts实战案例代码(24):柱图数据顶部显示图片的解决方案
Echarts实战案例代码(24):柱图数据顶部显示图片的解决方案
633 0
Echarts实战案例代码(24):柱图数据顶部显示图片的解决方案
|
安全 固态存储 网络协议
Elasticsearch详解与安装
Elasticsearch详解与安装
279 2
|
Windows
idea Translation插件翻译失败。TKK: 更新 TKK 失败,请检查网络连接
idea Translation插件翻译失败。TKK: 更新 TKK 失败,请检查网络连接
810 0
|
存储 Linux 应用服务中间件
Centos基础环境搭建--安装docker
Centos基础环境搭建--安装docker
606 0
Centos基础环境搭建--安装docker
|
人工智能 编译器 Linux
【重学C/C++系列(二)】:extern关键字用法全解析
extern 是C/C++语言中**表明全局变量或者函数作用范围(可见性)的关键字**,编译器收到extern通知,则其声明的变量或者函数可以在本模块或者其他模块使用。
【重学C/C++系列(二)】:extern关键字用法全解析