正则表达式真的很强,可惜你不会写

先放个链接,万一有人关注呢

优质文章推荐

↓ ↓ ↓ ↓ 

不会这条命令你还怎么玩Linux

CentOS与Ubuntu到底怎么选择?

你还认为它们是Linux下不起眼的小命令吗?

Linux系统目录结构讲解

OpenStack不能用这个系统镜像?



正则表达式是一种强大的文本处理工具,它允许你根据一定的规则来搜索、匹配、替换和验证文本。它是计算机科学和文本处理领域的基本概念之一,能够在各种编程语言和应用中发挥重要作用。
一、正则表达式概述
正则表达式,通常简称为“正则”或“RegExp”,是一种用于描述字符串模式的方法。它由一系列字符和特殊符号组成,定义了一种搜索模式。正则表达式可以用来进行文本匹配、搜索、替换、验证和提取等操作。
二、正则表达式的应用场景
正则表达式在计算机领域有广泛的应用,包括:
1、文本搜索和匹配:查找特定模式的字符串,如搜索包含特定关键词的文档。
2、数据验证:验证用户输入的数据是否符合特定格式,如电子邮件地址、电话号码、日期等。
3、数据提取:从文本中提取特定信息,如从HTML页面中提取链接或从日志文件中提取关键信息。
4、字符串替换:将文本中的特定模式替换为其他内容,如过滤敏感词汇。
5、日志分析:分析日志文件以提取有用的信息,如统计访问量或检测异常事件。
6、编译原理:在编译器和解释器中用于词法分析和语法分析。
7、网络爬虫:用于网页内容的抓取和处理。
三、正则表达式的元字符
正则表达式的元字符是构成模式的基本元素,它们具有特殊的含义。一些常见的元字符包括:
.:匹配任意字符,除了换行符。*:匹配前一个字符零次或多次。+:匹配前一个字符一次或多次。?:匹配前一个字符零次或一次。|:表示“或”操作,匹配两个或多个模式中的任何一个。[]:定义字符类,匹配括号内的任何字符。():表示分组,用于捕获匹配的文本。
四、正则表达式的字符类
字符类用于匹配某一类字符。常见的字符类包括:
[0-9]:匹配任何数字。[a-z]:匹配小写字母。[A-Z]:匹配大写字母。[a-zA-Z]:匹配任何字母。[^0-9]:匹配除了数字以外的字符。[aeiou]:匹配任何元音字母。
五、正则表达式的数量词
数量词用于指定模式中字符的重复次数。常见的数量词包括:
{n}:匹配前一个字符恰好 n 次。{n,}:匹配前一个字符至少 n 次。{n,m}:匹配前一个字符至少 n 次,但不超过 m 次。*:匹配零次或多次。+:匹配一次或多次。?:匹配零次或一次。
六、正则表达式的边界匹配
边界匹配用于限定匹配模式的位置,常见的边界匹配符号包括:
^:匹配字符串的开始。$:匹配字符串的结束。\b:匹配单词的边界。\B:匹配非单词边界。
七、正则表达式的特殊字符
正则表达式中的特殊字符通常具有特殊的含义,如果你希望匹配它们本身,需要进行转义。以下是一些常见的特殊字符和它们的含义:
.:匹配除换行符 \n 外的任何字符。
例如,正则表达式 a.b 可以匹配 "axb"、"aab"、"a1b" 等。
*:匹配前一个字符零次或多次。
例如,正则表达式 ca*t 可以匹配 "ct"、"cat"、"caat" 等。
+:匹配前一个字符一次或多次。
例如,正则表达式 ca+t 可以匹配 "cat"、"caat" 等,但不匹配 "ct"。
?:匹配前一个字符零次或一次。
例如,正则表达式 colou?r 可以匹配 "color" 和 "colour"。
|:表示“或”操作,匹配两个或多个模式中的任何一个。
例如,正则表达式 apple|banana 可以匹配 "apple" 或 "banana"。
[]:定义字符类,匹配括号内的任何字符。
例如,正则表达式 [aeiou] 可以匹配任何元音字母。
():表示分组,用于捕获匹配的文本。
例如,正则表达式 (\d{3})-(\d{2}) 可以匹配 "123-45" 并捕获 "123" 和 "45"。
正则表达式的特殊字符具有强大的匹配能力,但也需要小心使用,特别是在处理复杂模式时,容易引发意外的结果。
八、正则表达式的组匹配
正则表达式的组匹配允许你将模式中的一部分用括号括起来,以便捕获匹配的内容,这些捕获的内容可以在后续操作中使用。组匹配非常有用,特别是在需要提取或替换特定部分的文本时。
示例一:匹配日期
考虑一个匹配日期的例子,正则表达式为
 (\d{4})-(\d{2})-(\d{2})
这个正则表达式会匹配形如 "2023-05-09" 的日期,并捕获年、月、日三个部分。
"2023-05-09" 匹配整个模式,捕获的结果是:年 = "2023",月 = "05",日 = "09"。
示例二:替换重复单词
正则表达式的组匹配在替换文本中的内容时非常有用。考虑一个需要将文本中的重复单词替换为一次的情况,正则表达式为
\b(\w+)\b\s+\1\b
\b(\w+)\b 匹配一个单词,并捕获到组1中。
\s+ 匹配一个或多个空白字符。
\1\b 匹配与组1相同的单词,并匹配单词边界。
通过这个正则表达式,可以将文本中的 "word word" 替换为 "word"。
九、正则表达式的反向引用

正则表达式的反向引用是一种强大的技术,允许你在模式中引用已经捕获的文本,并在匹配时使用这些引用。这通常通过组匹配和反向引用组号来实现。反向引用在处理需要重复出现的文本模式时非常有用,例如识别重复单词、标签、括号等。

基本语法

在正则表达式中,反向引用使用组号来指示要引用的组,组号从1开始。组是通过在模式中使用圆括号 () 来创建的。一旦你捕获了一个组,你可以在后续的模式中引用它。引用的语法是 \ 后跟组号,例如 \1 表示引用组1。

示例一:匹配重复单词

假设我们有一段文本,其中有一些单词出现了两次。我们希望使用正则表达式将这些重复的单词识别出来。

文本:"Hello, hello, world, world, example, example."

正则表达式:

 \b(\w+)\b.*\b\1\b

\b(\w+)\b:匹配一个单词并捕获到组1中。

.*:匹配任意字符(包括空格)零次或多次。

\b\1\b:引用组1,确保匹配的是与组1相同的单词,并且单词边界匹配。

使用这个正则表达式,我们可以捕获到重复的单词 "hello" 和 "world"。

示例二:HTML标签匹配

假设我们需要从HTML文档中提取所有的链接文本和链接地址。HTML标签是有嵌套关系的,我们可以使用反向引用来处理这种情况。

HTML片段:

<a href="https://www.example1.com">Example 1a><a href="https://www.example2.com">Example 2a><a href="https://www.example3.com">Example 3a>
正则表达式: 
"([^"]+)">([^<]+)


"([^"]+)">:匹配链接的开头标签,捕获链接地址到组1中。([^<]+):匹配链接文本,捕获到组2中。:匹配链接的结束标签。
  • 使用这个正则表达式,我们可以捕获到链接地址和链接文本

来不及解释了,快上车!(进群看公告)


欢迎新的小伙伴加入!在这里,我们鼓励大家积极参与群内讨论和交流,分享自己的见解和经验,一起学习和成长。同时,也欢迎大家提出问题和建议,让我们不断改进和完善这个平台。

               点个在看,你最好看!

请使用浏览器的分享功能分享到微信等