常用的正则表达式组成

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

正则表达式语法

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.mfbz.cn/a/568863.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【解决NodeJS项目无法在IDEA中调试的问题】使用JetBrains IDEA 2023 调试nodejs项目

项目采用Ant Design Pro React&#xff0c;使用前后端分离开发方式&#xff0c;后端可以很容易的打断点调试&#xff0c;但是前端通过网页进行调试&#xff0c;在IDEA中加了调试断点&#xff0c;但是没有什么用处。 解决方案如下&#xff1a; 点击新建运行配置 新建JavaScrip…

BERT-CRF 微调中文 NER 模型

文章目录 数据集模型定义数据集预处理BIO 标签转换自定义Dataset拆分训练、测试集 训练验证、测试指标计算推理其它相关参数CRF 模块 数据集 CLUE-NER数据集&#xff1a;https://github.com/CLUEbenchmark/CLUENER2020/blob/master/pytorch_version/README.md 模型定义 imp…

李沐60_机器翻译数据集——自学笔记

!pip install d2limport os import torch from d2l import torch as d2l下载和预处理数据集 在这个将英语翻译成法语的机器翻译问题中&#xff0c; 英语是源语言&#xff08;source language&#xff09;&#xff0c; 法语是目标语言&#xff08;target language&#xff09;。…

交互式探索微生物群落与生态功能的关系

微生物群落在生态系统中发挥则重要功能&#xff0c;我们在对微生物群落进行分析时&#xff0c;会将不同分类水平&#xff08;从门到属&#xff09;的微生物类群的相对丰度与测定的某一生态功能进行相关性分析。但由于微生物类群数较多&#xff0c;又有不同的分类水平&#xff0…

DeepFaceLab小白教程:视频换脸过程

合适那些人阅读&#xff1f; 适合从未使用过DeepFaceLab的群体。 如果你想基于DeepFaceLab完成一次视频换脸的操作&#xff0c;可以看本篇。 下载方式 GitHub https://github.com/iperov/DeepFaceLab 我是用motrix下载。 网盘 https://pan.baidu.com/share/init?surlO4…

详解数据结构:队列(含栈与队列扩展)

一、顺序队列 有一种线性序列&#xff0c;特点是先进先出&#xff0c;这种存储结构称为队列。队列也是一种线性表&#xff0c;只不过它是操作受限的线性表&#xff0c;只能再两端操作&#xff1a;一端进、一端出。进的一端称为队尾&#xff0c;出的一端称为队头。队列可以用顺…

【笔记django】创建一个app

创建app 错误 raise ImproperlyConfigured( django.core.exceptions.ImproperlyConfigured: Cannot import rules. Check that dvadmin.rules.apps.RulesConfig.name is correct.原因 刚创建的rules的app被手动移动到了dvadmin目录下 而dvadmin/rules/apps.py的内容还是&…

系统设计 --- E2E Test System

系统设计 --- E2E Test System 什么是E2EE2E Architecture Example 什么是E2E E2E&#xff08;端到端&#xff09;测试是一种软件测试方法&#xff0c;旨在模拟真实的用户场景&#xff0c;测试整个应用程序或系统的端到端功能和交互流程。E2E 测试涵盖了从用户界面到后端系统的…

OpenHarmony实战开发-合理运行后台任务

简介 设备返回主界面、锁屏、应用切换等操作会使应用退至后台。为了降低设备耗电速度、保障用户使用流畅度&#xff0c;系统会对退至后台的应用进行管控&#xff0c;包括进程挂起和进程终止。为了保障后台音乐播放、日历提醒等功能的正常使用&#xff0c;系统提供了受规范约束…

iptables实现docker容器动态端口映射实操

背景 之前在《Docker 动态修改容器端口映射的方法》一文中&#xff0c;说明了如何使用修改配置和加防火墙规则实现动态端口映射。但是没有具体分享加防火墙实现动态端口映射的实际案例。今天就分享一下实际操作案例&#xff0c;供大家参考。 分析 动态端口映射的用途 容器端口…

JavaEE初阶——多线程(六)——线程池

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 小比特 大梦想 此篇文章与大家分享多线程的第六篇文章,关于线程池 如果有不足的或者错误的请您指出! 目录 3.线程池3.1标准库的线程池3.2 标准库自己提供的几个工厂类3.3自己实现一个线程池完成大体框架接下来完…

解决DataGrip连接MySQL8时出现时区错误问题

解决办法&#xff1a;在url后面拼接时区参数 ?serverTimezoneAsia/Shanghai

生成式AI在B端产品的应用分析

AI产品发展到现在&#xff0c;消费端的产品应用还受到比较大的限制&#xff1b;但是在B端&#xff0c;已经有了不错的表现。作者总结了AI产品在B端的几款应用&#xff0c;一起来看看表现如何。 生成式AI在B端产品的应用分析© 由 ZAKER 提供 随着今年生成式AI应用的大范围…

绝地求生:16款战术手套,你最钟爱哪一款?

大家好&#xff0c;我是闲游盒&#xff01; 喜迎PUBG七周年生日同时游戏里又迎来了一款新的战术手套&#xff0c;那么就让我们来回顾一下目前出游戏中的16款战术手套吧&#xff0c;看看你最中意的是哪一款&#xff1f; 1、MAZARIN1K 战术手套 2、SPAJKK 战术手套 3、SWAGGER 战…

机器学习(四)之无监督学习

前言&#xff1a; 前面写了监督学习的几种算法&#xff0c;下面就开始无监督啦&#xff01; 如果文章有错误之处&#xff0c;小伙伴尽情在评论区指出来&#xff08;嘿嘿&#xff09;&#xff0c;看到就会回复的。 1.聚类&#xff08;Clustering&#xff09; 1.1 概述&#xff…

8.4.3 使用3:配置单臂路由实现VLAN间路由

1、实验目的 通过本实验可以掌握&#xff1a; 路由器以太网接口上的子接口配置和调试方法。单臂路由实现 VLAN间路由的配置和调试方法。 2、实验拓扑 实验拓扑如下图所示。 3、实验步骤 &#xff08;1&#xff09;配置交换机S1 S1(config)#vlan 2 S1(config-vlan)#exit S…

华为海思校园招聘-芯片-数字 IC 方向 题目分享——第七套

华为海思校园招聘-芯片-数字 IC 方向 题目分享——第七套 (共9套&#xff0c;有答案和解析&#xff0c;答案非官方&#xff0c;未仔细校正&#xff0c;仅供参考&#xff09; 部分题目分享&#xff0c;完整版获取&#xff08;WX:didadidadidida313&#xff0c;加我备注&#x…

LayuiMini使用时候初始化模板修改(下载源码)

忘记加了 下载 地址 &#xff1a; layui-mini: layuimini&#xff0c;后台admin前端模板&#xff0c;基于 layui 编写的最简洁、易用的后台框架模板。只需提供一个接口就直接初始化整个框架&#xff0c;无需复杂操作。 LayuiMini使用时候初始化模板官网给的是&#xff1a; layu…

立即刷新导致请求的response没有来得及加载造成的this request has no response data available

1、前端递归调用后端接口 const startProgress () > {timer.value setInterval(() > {if (progress.value < 100) {time.value--;progress.value Math.ceil(100 / wait_time.value);} else {clearInterval(timer.value);progress.value 0;timer.value null;time.…

电磁兼容(EMC):静电放电(ESD)抗扰度试验深度解读(六)

目录 1. 静电测试干扰方式 2. 案例一 3. 案例二 4. 案例三 5. 案例四 6. 总结 静电放电测试的复杂性决定了这项测试对产品的主要影响方式也是多样的。标准里介绍了几种常见的影响方式&#xff1a; 1. 静电测试干扰方式 在静电放电试验中&#xff0c;测试了受试设备对于…
最新文章