常用的正则表达式组成

devtools/2024/9/23 3:20:00/

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

正则表达式语法

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.ppmy.cn/devtools/23506.html

相关文章

Python网络数据抓取(3):Beautiful Soup

Beautiful Soup 这个库通常被称为Beautiful Soup 4&#xff08;BS4&#xff09;。它主要用来从HTML或XML文件中抓取数据。此外&#xff0c;它也用于查询和修改HTML或XML文档中的数据。 现在&#xff0c;让我们来了解如何使用Beautiful Soup 4。我们将采用上一节中使用的HTML数据…

扭蛋机小程序带来了什么优势?扭蛋机收益攻略

在当下的潮流消费时代&#xff0c;人们对潮玩也日益个性化&#xff0c;扭蛋机作为一种新型的娱乐消费模式&#xff0c;深受大众喜爱。扭蛋机的价格低&#xff0c;各个年龄层的玩家都可以进行购买&#xff0c;潜在玩家量非常大。扭蛋机商品主打热门IP周边等&#xff0c;种类繁多…

Day5: 5道C++ 面向对象高频题整理

1、强制类型转换运算符 在C中&#xff0c;强制类型转换运算符&#xff08;也称为类型转换操作符&#xff09;用于在不同类型之间进行显式的类型转换。C提供了四种类型的强制类型转换运算符&#xff0c;分别是static_cast、dynamic_cast、reinterpret_cast和const_cast。 这些…

主成分分析(PCA):揭秘数据的隐藏结构

在数据分析的世界里&#xff0c;我们经常面临着处理高维数据的挑战。随着维度的增加&#xff0c;数据处理、可视化以及解释的难度也随之增加&#xff0c;这就是所谓的“维度的诅咒”。主成分分析&#xff08;PCA&#xff09;是一种强大的统计工具&#xff0c;用于减少数据的维度…

Vue3+Nuxt3 从0到1搭建官网项目(SEO搜索、中英文切换、图片懒加载)

Vue2Nuxt2 从 0 到1 搭建官网~ 想开发一个官网&#xff0c;并且支持SEO搜索&#xff0c;当然离不开我们的 Nuxt &#xff0c;Nuxt2 我们刚刚可以熟练运用&#xff0c;现在有出现了Nuxt3&#xff0c;那通过本篇文章让我们一起了解一下。 安装 Nuxt3 // npx nuxilatest init &…

Blender曲线操作

1.几种常见建模方式 -多边形建模&#xff1a;Blender&#xff0c;C4D&#xff0c;3DsMax&#xff0c;MaYa -曲线&#xff1a; -曲面&#xff1a;Rhino&#xff08;Nurbs&#xff09; -雕刻&#xff1a;Blender&#xff0c;ZBrush -蜡笔&#xff1a;Blender 1&#xff09;新…

清除git缓存后,每次pull或者push都需要输入用户名密码

git bash进入你的项目目录&#xff0c;输入&#xff1a;git config --global credential.helper store 然后在文件下pull一下&#xff0c;输入一次用户名密码后&#xff0c;再次pull或者push就不需要输入了。 亲测有用哦

黑马点评(十二) -- UV统计

一 . UV统计-HyperLogLog 首先我们搞懂两个概念&#xff1a; UV&#xff1a;全称Unique Visitor&#xff0c;也叫独立访客量&#xff0c;是指通过互联网访问、浏览这个网页的自然人。1天内同一个用户多次访问该网站&#xff0c;只记录1次。 PV&#xff1a;全称Page View&…