常用的正则表达式组成

正则表达式是一种强大的文本处理工具,用于匹配、搜索、替换、分割等多种操作。以下是正则表达式的基本组成和语法,以及如何使用它们来构建复杂的模式。

正则表达式语法

1. 基本字符匹配
- 普通字符: 大多数字符,如`a-z`、`A-Z`、`0-9`,直接匹配文本中的相应字符。
- 特殊字符: 如 `.`、`?`、`*`、`+`、`^`、`$`、`(`、`)`、`[`、`]`、`{`、`}`、`\`、`|`。这些符号在正则表达式中有特殊的含义,若要匹配它们本身,需要使用反斜线进行转义,例如 `\\`、`\.`。

 2. 特殊字符
- `.`: 匹配除换行符以外的任意单个字符。
- `^`: 匹配输入字符串的开始位置。
- `$`: 匹配输入字符串的结束位置。

### 3. 字符类
- **`[abc]`**: 匹配方括号内的任何一个字符(在这里是`a`、`b`或`c`)。
- **`[^abc]`**: 匹配不在方括号内的任何字符。
- **`[a-z]`**: 匹配任何从`a`到`z`的小写字母。
- **`[A-Z]`**: 匹配任何从`A`到`Z`的大写字母。
- **`[0-9]`**: 匹配任何从`0`到`9`的数字。

### 4. 预定义字符类
- **`\d`**: 匹配任何数字,等价于`[0-9]`。
- **`\D`**: 匹配任何非数字字符,等价于`[^0-9]`。
- **`\s`**: 匹配任何空白字符(包括空格、制表符、换行符等)。
- **`\S`**: 匹配任何非空白字符。
- **`\w`**: 匹配任何单词字符(字母、数字以及下划线),等价于`[a-zA-Z0-9_]`。
- **`\W`**: 匹配任何非单词字符,等价于`[^a-zA-Z0-9_]`。

### 5. 量词
- **`*`**: 匹配前面的子表达式零次或多次。
- **`+`**: 匹配前面的子表达式一次或多次。
- **`?`**: 匹配前面的子表达式零次或一次。
- **`{n}`**: 匹配前面的子表达式确切`n`次。
- **`{n,}`**: 匹配前面的子表达式至少`n`次。
- **`{n,m}`**: 匹配前面的子表达式至少`n`次,但不超过`m`次。

### 6. 分组和引用
- **`(exp)`**: 匹配`exp`并捕获文本到自动命名的组里,它可以稍后通过反向引用被重新使用。
- **`(?:exp)`**: 匹配`exp`,但是不捕获匹配的文本,不分配组号。

### 7. 断言
- **`exp1(?=exp2)`**: 断言后面跟着能匹配`exp2`的位置。
- **`exp1(?!exp2)`**: 断言后面不跟着能匹配`exp2`的位置。
- **`(?<=exp2)exp1`**: 断言前面是能匹配`exp2`的位置。
- **`(?<!exp2)exp1`**: 断言前面不是能匹配`exp2`的位置。

### 8. 逻辑或
- **`exp1|exp2`**: 匹配`exp1`或`exp2`。

### 9. 转义
- **`\`**: 转义后面跟着的字符,取消其特殊意义。

使用这些构件,你可以构建从简单到复杂的正则表达式来进行有效的文本匹配和处理。正则表达式是一种功能强大但学习曲线相对陡峭的工具,实践是掌握它们的关键。

好的,让我给你举几个例子,包括这些构建的组合,并解释它们的含义:

1. **匹配邮箱地址**
   - 正则表达式: `\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b`
   - 解释:
     - `\b`: 匹配单词边界,确保邮箱地址前后没有其他字符。
     - `[A-Za-z0-9._%+-]+`: 匹配邮箱地址的用户名部分,可以包含字母、数字以及特殊字符`._%+-`,并且至少包含一个字符。
     - `@`: 匹配邮箱地址中的@符号。
     - `[A-Za-z0-9.-]+`: 匹配邮箱地址的域名部分,可以包含字母、数字以及特殊字符`.-`,并且至少包含一个字符。
     - `\.`: 匹配邮箱地址中的点号(.),用于分隔域名中的各个部分。
     - `[A-Z|a-z]{2,}`: 匹配邮箱地址的顶级域名部分,可以是大小写字母,至少包含两个字符。
     - `\b`: 单词边界,确保邮箱地址的结束位置。

2. **匹配HTML标签内的文本内容**
   - 正则表达式: `<([^>]+)>.*?<\/\1>`
   - 解释:
     - `<([^>]+)>`: 匹配HTML标签的开始部分,其中`[^>]+`匹配除了>之外的任意字符,括号用于捕获匹配到的标签名。
     - `.*?`: 匹配标签内的任意文本,`*?`表示非贪婪匹配,尽可能少地匹配字符。
     - `<\/\1>`: 匹配与之前捕获的标签名相匹配的结束标签。

3. **匹配日期和时间**
   - 正则表达式: `\b\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\b`
   - 解释:
     - `\b`: 单词边界,确保日期和时间前后没有其他字符。
     - `\d{4}-\d{2}-\d{2}`: 匹配YYYY-MM-DD格式的日期部分。
     - `\s`: 匹配一个空白字符,用于分隔日期和时间。
     - `\d{2}:\d{2}:\d{2}`: 匹配HH:MM:SS格式的时间部分。

这些例子展示了如何利用正则表达式的不同构建相互组合,以匹配复杂的文本模式。通过理解每个构建的含义和作用,你可以更有效地应用正则表达式来处理各种文本匹配和提取任务。

常用的正则表达式模式

当谈到正则表达式时,有一些常用的模式可以帮助你处理各种文本匹配和替换任务。这里我列举一些常用的正则表达式模式,以及它们的用途和示例。

1. **匹配数字**
   - `\d+`: 匹配一个或多个数字字符。
     - 示例:`"123"`, `"2022"`, `"9"`。

2. **匹配非数字字符**
   - `\D+`: 匹配一个或多个非数字字符。
     - 示例:`"Hello"`, `"abc"`。

3. **匹配字母**
   - `[a-zA-Z]+`: 匹配一个或多个字母字符(不区分大小写)。
     - 示例:`"Hello"`, `"world"`。

4. **匹配单词**
   - `\b\w+\b`: 匹配一个完整的单词。
     - 示例:`"Hello"`, `"world"`, `"123abc"`。

5. **匹配空白字符**
   - `\s+`: 匹配一个或多个空白字符,如空格、制表符、换行符等。
     - 示例:`"Hello World"`, `"Tab\tSeparated\tValues"`。

6. **匹配非空白字符**
   - `\S+`: 匹配一个或多个非空白字符。
     - 示例:`"HelloWorld123"`, `"abc@xyz.com"`。

7. **匹配邮箱地址**
   - `\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b`: 匹配常见的邮箱地址格式。
     - 示例:`"user@example.com"`, `"john.doe123@gmail.com"`。

8. **匹配URL**
   - `\bhttps?://\S+\b`: 匹配常见的URL格式(HTTP或HTTPS)。
     - 示例:`"https://www.example.com"`, `"http://google.com"`。

9. **匹配手机号码**
   - `\b\d{3}[-.]?\d{3}[-.]?\d{4}\b`: 匹配常见的手机号码格式。
     - 示例:`"123-456-7890"`, `"555.123.4567"`。

10. **匹配日期**
    - `\b\d{4}-\d{2}-\d{2}\b`: 匹配YYYY-MM-DD格式的日期。
      - 示例:`"2022-01-01"`, `"1990-12-31"`。

11. **匹配IP地址**
    - `\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b`: 匹配IPv4地址。
      - 示例:`"192.168.1.1"`, `"10.0.0.1"`。

12. **匹配中文字符**
    - `[\u4e00-\u9fa5]+`: 匹配一个或多个中文字符。
      - 示例:`"你好吗?"`, `"中文字符测试"`。

13. **匹配邮政编码**
    - `\b\d{6}\b`: 匹配6位数字的邮政编码格式。
      - 示例:`"100085"`, `"200010"`。

14. **匹配QQ号码**
    - `\b[1-9][0-9]{4,}\b`: 匹配5位或更多位数字组成的QQ号码格式。
      - 示例:`"123456789"`, `"9876543210"`。

15. **匹配身份证号码**
    - `\b\d{17}[\d|X]|\d{15}\b`: 匹配18位或15位身份证号码格式。
      - 示例:`"110101199003077657"`, `"31010119900101001X"`。

16. **匹配货币金额**
    - `\b\d+(,\d{3})*(\.\d{1,2})?\b`: 匹配货币金额,可以包含逗号分隔的千位分隔符和小数点后两位。
      - 示例:`"$1,234.56"`, `"¥12,345,678.90"`。

17. **匹配HTML标签**
    - `<[^>]+>`: 匹配HTML标签及其内容。
      - 示例:`"<p>Hello</p>"`, `"<a href="https://www.example.com">Link</a>"`。

18. **匹配XML标签**
    - `<\s*([^\s>]+)[^>]*>.*?<\/\1\s*>`: 匹配XML标签及其内容。
      - 示例:`"<book>Title</book>"`, `"<person><name>John</name></person>"`。

这些正则表达式模式可以帮助你处理更多的文本匹配和提取任务,例如验证身份证号码、匹配HTML/XML标签等。在使用时,根据具体情况进行调整和组合,以满足你的需求。

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

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

相关文章

盲人过马路安全:科技力量赋予“隐形守护者”

作为一名资深记者&#xff0c;我始终关注着社会各群体的生活现状&#xff0c;尤其是那些面临特殊挑战的人群。今天&#xff0c;我想聚焦一个看似平常却对盲人构成重大困扰的日常场景——过马路&#xff0c;以及一款名为蝙蝠避障的辅助应用如何成为他们的盲人过马路安全的守护者…

自制Apache-Doris 2.0.4镜像Docker部署一Fe和一Be集群及遇到的问题解决

自制Apache-Doris 2.0.4镜像Docker部署一Fe和一Be集群及遇到的问题解决 文章目录 1.前言2.doris是什么&#xff1f;2.1简介2.2介绍2.3使用场景2.4架构 3.官网4.构建部署4.1 构建环境4.2 doris2.0.4的fe和be镜像构建4.2.1 fe2.0.4镜像构建脚本4.2.2 be2.0.4镜像构建4.2.3 启动脚…

OSINT技术情报精选·2024年4月第3周

OSINT技术情报精选2024年4月第3周 2024.4.22版权声明&#xff1a;本文为博主chszs的原创文章&#xff0c;未经博主允许不得转载。 1、斯坦福大学&#xff1a;《2024年人工智能指数报告》 最近&#xff0c;由李飞飞联合领导的斯坦福大学以人为本人工智能研究所&#xff08;St…

FebHost:科技企业如何规划并注册.AI域名?

为确保企业使用.AI域名的方式准确反映其对人工智能技术的关注&#xff0c;企业应考虑以下步骤&#xff1a; 了解法律和合规要求&#xff1a; 第一步是了解与 .AI 域名相关的独特法律和合规要求。由于.AI域名源于安圭拉&#xff0c;企业必须遵守安圭拉的限制和法律规定。这包括…

K8S Centos7 安装 K8S 1.26单机版

文章目录 1.机器规划1.设置hostname2.编辑/etc/hosts3.安装ntpdate并同步时间4.关闭防火墙5.关闭selinux 2.安装 Docker1.安装Docker2.安装容器运行时cri-dockerd 3.安装K8S1.禁用swap2.安装Kubernetes相关软件3.所有master节点拉取k8s镜像4.初始化Kubernetes Master节点5.安装…

MySQL-用户管理

MySQL 用户分为 普通用户 和 root用户。root用户即超级管理员&#xff0c;拥有所有权限&#xff0c;包含创建&#xff0c;删除和修改用户等相关权限&#xff1b;普通用户只拥有被root用户授予的各种权限MySQL的安全性需要通过账户管理来实现 1、登录MySQL服务器 命令如下&…

Nginx七层负载均衡

1、七层负载均衡介绍 Nginx七层负载均衡是在应用层&#xff08;HTTP/HTTPS&#xff09;上进行的&#xff0c;可以根据HTTP请求的具体内容&#xff0c;如URL、Cookie、Header等&#xff0c;来决定将请求转发到哪个后端服务器。这种方式不仅能够均衡服务器的计算负载&#xff0c…

基于微信小程序的土地租赁的设计与实现

基于微信小程序的土地租赁的设计与实现 Design and Implementation of Land Leasing Based on WeChat Mini Program 完整下载链接:基于微信小程序的土地租赁的设计与实现 文章目录 基于微信小程序的土地租赁的设计与实现摘要第一章 绪论1.1 研究背景1.2 研究目的1.3 研究内容…

C语言 字符类型

下面 我们来说字符类型 我们来看这个 保险单 金额 和 总额 都可以用数字类型 而性别则需要字符型 字符数据的存储 – ASCI码 字符类型 char 就是专为存储字符(如字母&#xff0c;标点和数字)而设计的类型。 使用单引号包含单个字符或转义字符去表示一个 char 类型的常量。 …

Lua调用函数的方式汇总

在Lua脚本语言中&#xff0c;调用函数是一种基本的操作&#xff0c;它允许代码执行在函数定义中封装的操作。Lua 提供了几种灵活的方式来调用函数&#xff0c;以适应不同的场景和需求。以下是Lua中调用函数的几种常见方式&#xff1a; 1. 基本函数调用 最简单的调用方式是使用…

李沐56_门控循环单元——自学笔记

关注每一个序列 1.不是每个观察值都是同等重要 2.想只记住的观察需要&#xff1a;能关注的机制&#xff08;更新门 update gate&#xff09;、能遗忘的机制&#xff08;重置门 reset gate&#xff09; !pip install --upgrade d2l0.17.5 #d2l需要更新import torch from tor…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之五 简单进行车牌检测和识别

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之五 简单进行车牌检测和识别 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之五 简单进行车牌检测和识别 一、简单介绍 二、简单进行车牌检测和识别实现原理 …

深入理解Java消息中间件-消息的可靠性

基石&#xff1a;在分布式系统中实现消息的可靠性及其原理 在构建现代的分布式系统时&#xff0c;能否可靠地传递消息是衡量系统成功与否的一个关键。本文章旨在讨论如何实现消息的可靠性及其背后的原理&#xff0c;帮助Java技术架构师和开发者构筑一个稳固的系统。 消息可靠…

关于上传自己本地项目到GitHub的相关命令

https://www.cnblogs.com/nature161/p/15014265.html 根据教程里的来&#xff0c;主要注意这个命令&#xff1a; $ git pull --rebase origin master # 对GitHub的仓库包含了readme.md文件的情况先要执行这个命令再pull 如果你的GitHub是main分支想上传到main分支&#xff0…

Opencv_10_自带颜色表操作

void color_style(Mat& image); Opencv_10_自带颜色表操作&#xff1a; void ColorInvert::color_style(Mat& image) { int colormap[] { COLORMAP_AUTUMN, COLORMAP_BONE , COLORMAP_JET , COLORMAP_WINTER, COLORMAP_RAINBOW , COLOR…

编译器的学习

常用的编译器&#xff1a; GCCVisual CClang&#xff08;LLVM&#xff09;&#xff1a; Clang 可以被看作是建立在 LLVM 之上的一个项目, 实际上LLVM是clang的后端&#xff0c;clang作为前端前端生成LLVM IR&#xff0c;https://zhuanlan.zhihu.com/p/656699711MSVC &#xff…

Docker常用命令(镜像、容器、网络)

一、镜像 1.1 存出镜像 将镜像保存成为本地文件 格式&#xff1a;docker save -o 存储文件名 存储的镜像docker save -o nginx nginx:latest 1.2 载入镜像 将镜像文件导入到镜像库中 格式&#xff1a;docker load < 存出的文件或docker load -i 存出的文件…

程序猿成长之路之数据挖掘篇——朴素贝叶斯

朴素贝叶斯是数据挖掘分类的基础&#xff0c;本篇文章将介绍一下朴素贝叶斯算法 情景再现 以挑选西瓜为例&#xff0c;西瓜的色泽、瓜蒂、敲响声音、触感、脐部等特征都会影响到西瓜的好坏。那么我们怎么样可以挑选出一个好的西瓜呢&#xff1f; 分析过程 既然挑选西瓜有多个…

Android Studio 报错:AVD Pixel_3a_API_30_x86 is already running

在我的Android Studio和虚拟机运行时&#xff0c;我的电脑不小心关机了&#xff0c;在启动后再次打开Android Studio并运行虚拟机时发现报错。 Error while waiting for device: AVD Pixel_3a_API_30_x86 is already running. If that is not the case, delete the files at C…

c++设计模式之桥接模式(拼接组合)

桥接模式&#xff1a;就是进行拼接组装 应用举例&#xff1a; 1.定义了形状&#xff0c;抽象形状接口&#xff0c;圆&#xff0c;矩形 2.定义了颜色&#xff0c;抽象颜色接口&#xff0c;红色&#xff0c;蓝色 3&#xff0c;怎么桥接&#xff0c;抽象具体形状和具体颜色的组合…