正则表达式的使用(超详细)适用于任何语言java、python等等

本博客介绍正则表达式,适用于多种语言。先讲解基础用法,包括限定符、分组、“或”运算符、字符类和元字符的使用;接着介绍高级部分的贪婪与懒惰匹配;最后给出实例,如IP地址匹配和RGB颜色值匹配,后续还会更新更多案例和拓展。
部署运行你感兴趣的模型镜像


前言

正则表达式是很多应用场景都能使用到的语法,我们需要对数据进行分析的人对正则表达式的需求很高,所以我们得好好掌握,以便我们对数据进行分析,本教程适用于java、python、c/c++、PHP、Go、JS、C#等语言的正则表达式,大家都可以进行学习,本教程不进行更多语言拓展,仅对正则表达式进行讲解,后续会进行更深入的更新!

一、表达式基础用法

1.限定符

序号字符功能
1)表示它的前一个字符需要出现0次或者1次,即可有可无
2)*表示它前一个字符出现0次或无限次,即可有可无
3)+表示它前一个字符需出现1次以上
4){a}表示前一个字符需出现a次
5){a,b}表示前一个字符需出现a次到b次之间
6){a,}表示前一个出现a次或a次以上

1)"?"的使用

举个栗子,下面有一串字符

Hi, welcome to my company. Do you need a job

输入如下正则表达式

t?o

结果为

welcome
to
company
Do
you
job

该限定符的作用是前一个字符只需要出现0次或者1次,只寻找匹配的后一个字符

2)"*"的使用

举个栗子,下面有个文本

ab
abc
abccccccccc
acdd

输入如下正则表达式

abc*

结果为

ab
abc
abccccccccc

该限定符表示它前面的字符出现0次或无限次,即可以没有c,也可以有一次或很多次

3)"+"的使用

举个栗子,下面有个文本

ab
abc
abccccccccc
acdd

输入如下正则表达式

abc+

结果为

abc
abccccccccc

该限定符表示它前面的字符需出现1次以上的,可以看出与2)相比它少了个ab。

4)"{a}"的使用

举个栗子,下面有个文本

ab
abc
abcc
abccccccccc
acdd

输入如下正则表达式1

abc{1}

结果1为

abc

输入如下正则表达式2

abc{2}

结果2为

abcc

输入如下正则表达式3

abc{9}

结果3为

abccccccccc

该限定符表示前面的字符需要出现a次,所以也就不会匹配不符合的选项

5)"{a,b}"的使用

举个栗子,下面有个文本

ab
abc
abcc
abccccccccc
acdd

输入如下正则表达式

abc{2,9}

结果为

abcc
abccccccccc

该字符表示前面的字符需出现a次到b次之间,我们可以看到此时,仅出现2次到9次的内容

6)"{a,}"的使用

举个栗子,下面有个文本

ab
abc
abcc
abccccccccc
acdd

输入如下正则表达式

abc{2,}

结果为

abcc
abccccccccc

该限定符表示前一个出现a次或a次以上,即可出现2次或以上的内容

注意:该限定符的对象是一个字符,是一个字符,是一个字符!!!只能寻找它前面的字符

2.分组

字符:(多个字符)

功能:表示可以匹配括号内的多个字符为一组,后面可以添加限定符

"(多个字符)"的使用

举个栗子,下面有个文本

ab
abc
abcc
abcabcabc
acd
acddd

我们需要匹配ab在一起的多个字符为一组的数据,可以使用如下正则表达式

(ab)

结果为

ab
abc
abcc
abcabcabc

我们需要匹配多个ab为一组的数据,我们可以在它后面加上个+限定符

(ab)+

结果为

ab
abc
abcc
abcabcabc

3."或"运算符

字符:|

功能:匹配多个字符,与编程的逻辑运算符"或"相似

"|"的使用

a pen
a book
a room

例如我们需要匹配a pen或a book,我们需要输入如下正则表达式

a (pen|book)

结果为

a pen
b book

注意:要加上括号哦

4.字符类

字符:[字符]+

功能:表示匹配的字符只能取自于方括号中

"[字符]+"的使用

有如下文本

abcd
hello world
aaabbbcccddd
基本使用-取需要的字符

我们需要取到所有包含ab的字符

[ab]+

结果

ab
aaabbb
拓展使用-指定字符的范围
序号字符结果
1[a-z]+所有的小写英文字符
2[a-zA-Z]+所有英文字符
3[a-zA-Z0-9]+所有的英文字符和数字
4^在字符类中为脱字符,与逻辑运算的非差不多
5[^0-9]+所有的非数字字符,包括换行符

5.元字符

序号字符功能
1)\d[小写]数字字符(0-9)
2)\D[大写]非数字字符
3)\w[小写]单词字符(英文、数字及下划线)
4)\W[大写]非单词字符
5)\s[小写]空白符(包含空格、Tab和换行符)
6)\S[大写]非空白符
7).任意字符(不包含换行符)
8)^匹配行首
9)$匹配行尾
10)\b[小写]匹配单词边界
11)\B[大写]匹配非单词边界

由于元字符较多,在此只做大致说明

8)"^"的使用

有如下文本

abcd

取行首的a的正则表达式为

a^

结果为

a

9)"$"的使用

有如下文本

abcd

取行尾的d的正则表达式为

d$

结果为

d

二、高级部分

1.贪婪与懒惰匹配

之前我们讲到的*、{}、+在匹配字符串的时候,默认会去匹配尽可能多的字符

例如有如下html代码

<html><head><meta charset="UTF-8"><title>hello world</title></head></html>

有如下正则表达式

<.+>

结果

<html><head><meta charset="UTF-8"><title>hello world</title></head></html>

在此可以看到该正则表达式会直接把整个字符串都全部匹配到,原因是因为中间的这个.+会匹配尽可能多的字符,这就是贪婪匹配

有如下正则表达式

<.+?>

结果

<html>
<head>
<meta charset="UTF-8">
<title>
</title>
</head>
</html>

由此我们可以看出,加上?后正则表达式会减少匹配的字符,它会将默认的贪婪匹配切换为懒惰匹配

三、实例

实例1-IP地址匹配

有如下文本

1234
255.255.0.0
259.255.255.0
192.168.1.1
0.0.0.0
hello world
111.111.0

在文本中提取所有出现的IPv4地址,我们可以使用如下正则表达式

\d+\.\d+\.\d+\.\d+

结果

255.255.0.0
259.255.255.0
192.168.1.1
0.0.0.0

分析

"\d+“会匹配任何长度大于1的数字,”\.“为”.“这个符号,因为”."在正则表达式中为特殊符号,需要用反斜杠进行转义,但我们会发现IP地址为0-255的数字,结果中的259.255.255.0显然已经超出范围,下面我们进行改良

如果正则表达式的前两位的值为25,那么第三位只能取0-5之间的数字
所以正则表达式为:

25[0-5]

但IP地址中的数字肯定不能只是25吧,所以我们需要用或来继续进行判断,如果第一位是2,第二位可以取0-4之间的值,第三位可以取0-9之间的值,我们可以用\d来表示

此时正则表达式为:

25[0-5]|2[0-4]\d

如果第一位为0-1之间的值,那么最后两位可以取00-99的任意数可以用\d\d代替,同时,我们指定ip地址可以有一位数,此时我们可以使用?限定符来表示它的可有可无,此时数字部分已经匹配完成,然后我们需要加上一个".“,然后我们需要进行3次重复匹配,最后的因为没有”."所以我们需要进行单独匹配,然后我们需要在首和尾加上字符边界来确保我们不好进行多余的匹配

所以最终的正则表达式为:

\b((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)\b

结果为:

255.255.0.0
192.168.1.1
0.0.0.0

实例2-RGB颜色值的匹配

有如下文本

#b2e0df
#ffffff
#4679ba
#000000
#FFFFFF

匹配文本中所有十六进制的RGB颜色值的正则表达式为

#[a-fA-F0-9]{6}\b

分析

我们需要a-f、A-F、0-9的字符,故我们需要字符类的范围,我们只需要六个字符故需要{6}限定符,为了防止匹配到多余字符,我们需要\b代表单词字符的边界。

结束

后续会更新更多案例,更多拓展,敬请期待哦!!

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>首先,用户的问题是:“我想查找项目中常用的正则表达式匹配示例或规则 请问项目中常用的正则表达式匹配示例”。这意味着用户想要知道在项目中常见的正则表达式匹配示例或规则。 我收到了系统级指令,必须遵守: - 所有行内数学表达式使用 `$...$` 格式。 - 独立公式使用 `$$...$$` 格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识。 此外,用户提到了参考站内引用,包括引用[1]、[2]、[3]、[4]和[5]。这些引用提供了有关正则表达式的信息: - 引用[1]:讨论数字匹配的正则表达式,如 `\d`、`\d+` 等。 - 引用[2]:提到匹配汉字的正则表达式。 - 引用[3]:关于Java使用正则表达式。 - 引用[4]:讨论JavaScript中正则匹配失败的原因。 - 引用[5]:关于常用正则表达式集合。 用户说:“上述引用仅供参考,并不是用户真正的需求,请尽可能多的参考用户上一次的问题和你的回答。” 但查看对话历史,上一次消息是系统指令和用户的问题。在对话历史中,用户的第一条消息就是这个请求。所以,我需要基于当前问题和提供的引用来响应。 用户真正的需求是查找项目中常用的正则表达式匹配示例或规则。因此,我的回答应该聚焦在提供常见的正则表达式示例,这些示例在项目开发中常用。 结构化回答: - **开头**:简要介绍正则表达式在项目中的应用,并根据引用内容自然地引用。 - **主体**:列出常见的正则表达式匹配示例,比如匹配数字、电子邮件、电话号码、URL、汉字等。确保使用中文解释。 - 由于有引用,我应该在相关部分添加引用标识。 - **结尾**:生成相关问题,以满足指令要求。 - **格式**:行内数学表达式如正则表达式模式应该用 `$...$` 格式,但正则表达式通常不是数学表达式,而是字符串模式。指令说“所有行内数学表达式(包括变量、不等式、方程等)必须使用$...$格式”,但正则表达式不是数学表达式;它更像代码。在示例中,系统指令使用了代码块(如Python代码),但没有提到正则表达式。为了安全起见,我应该将正则表达式模式作为代码或文本处理。指令指定数学表达式用 `$...$`,但正则表达式不是数学;它可能被视为文本模式。在用户提供的引用中,例如引用[1],使用了类似 `\d` 的格式,但没有LaTeX标记。我应该遵循指令:如果是数学表达式,用 `$...$`;但对于正则表达式,它可能更适合直接写或使用代码块。系统指令示例中没有正则表达式,但用户引用中使用了普通文本。我会假设正则表达式模式作为行内代码处理,但指令说“行内数学表达式”,而正则表达式不是数学。为避免混淆,我会在必要时使用 `$...$` 或直接写。在引用[1]中,它写为 `\d` 而没有特殊格式,但在LaTeX中,数学模式可能用于显示特殊字符。为了准确,我会将正则表达式模式写成行内代码或使用 `$...$` 如果它在数学上下文中。但在这里,最好使用反引号表示代码,如系统示例中的Python代码块。在系统指令示例中,代码块用于Python,所以我可以为代码使用代码块。 - 指令说:“独立公式必须使用$$...$$格式并单独成段”,但正则表达式通常不是公式。我会将正则表达式作为文本处理,必要时使用代码块。 - 确保回答使用中文。 常见正则表达式匹配示例: 1. **匹配数字**:如引用[1]提到的,`\d` 匹配单个数字,`\d+` 匹配一个或多个数字。 2. **匹配电子邮件地址**:常见如 `[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}`。 3. **匹配电话号码**:例如,`\(\d{3}\) \d{3}-\d{4}` 用于匹配格式如 (123) 456-7890。 4. **匹配URL**:如 `https?://[^\s/$.?#].[^\s]*`。 5. **匹配汉字**:如引用[2]提到的,Unicode范围用于汉字。 6. **其他常见**:如日期格式、IP地址等。 从引用中: - 引用[1]:专注于数字匹配。 - 引用[2]:汉字匹配。 - 引用[3]:Java使用。 - 引用[4]:JavaScript中问题。 - 引用[5]:常用集合。 我会整合这些,并提供示例。 生成相关问题:在结尾添加相关问题,如指令示例那样。 回答结构: 1. 介绍:正则表达式在项目中的重要性。 2. 常见匹配示例列表:每个示例说明模式、用途,并添加引用标识如果需要。 3. 结论:总结。 4. 相关问题。 添加引用标识:基于用户提供的引用,但用户说“仅供参考”,所以我应该在相关内容处自然地添加。 例如: - 当讨论数字匹配时,添加 [^1]。 - 当讨论汉字匹配时,添加 [^2]。 - 等等。 最终,相关问题:生成3-5个相关问题。 </think>### 项目中常用的正则表达式匹配示例 正则表达式是一种强大的工具,用于在各种项目中高效处理字符串匹配、验证和文本操作(如数据提取、输入验证等)。根据您提供的参考资料,我整理了一些项目中常见的正则表达式匹配示例和规则。这些示例涵盖了数字、电子邮件、日期、汉字等常见场景,并结合实际项目需求进行说明。每个示例都使用了标准正则表达式语法,并确保兼容主流编程语言(如 JavaScript、PythonJava 等)。如果您在实现时遇到问题,可以参考相关引用或调试工具(如在线正则测试器)。 以下是常见正则表达式匹配示例及其用途解释(模式使用 `$...$` 格式表示行内表达式,独立公式单独成段): #### 1. **匹配数字序列(如 ID、金额)** - **模式**:`$\d+$` 或 `$\d{n}$` - **用途**:在数据清洗或表单验证中,匹配连续数字(如订单号、金额)。例如: - `$\d+$` 匹配一个或多个数字(如 "123")。 - `$\d{6}$` 匹配恰好 6 位数字(如邮政编码)。这在引用[1]中强调了数字匹配的基本规则:`\d` 用于单个数字,`\d+` 用于多个数字[^1]。 - **应用场景**:用户输入验证(如手机号)、日志文件中提取数字 ID。 - **代码示例**(JavaScript): ```javascript const regex = /\d+/; console.log(regex.test("订单号: 1001")); // 输出: true,匹配到 "1001" ``` #### 2. **匹配电子邮件地址** - **模式**:`$[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$` - **用途**:用于注册表单或数据导入时验证邮箱格式。该模式确保用户名部分(如 "user.name")包含字母、数字、点或破折号,域名部分(如 "domain.com")以至少两个字母结尾。 - **应用场景**:用户注册系统、电子邮件营销工具。引用[4]指出,正则匹配失败的原因包括忘记设置全局标志或特殊字符处理不当,测试时需添加标志如 `g` 或 `i`[^4]。 - **代码示例**(Python): ```python import re pattern = r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}' result = re.findall(pattern, "联系 support@example.com 获取帮助") print(result) # 输出: ['support@example.com'] ``` #### 3. **匹配汉字(中文字符)** - **模式**:`$[\u4e00-\u9fa5]+$` - **用途**:在文本处理中提取或验证中文字符(如用户昵称、评论筛选)。该模式基于 Unicode 范围(4E00 到 9FA5),匹配一个或多个汉字。 - **应用场景**:多语言网站、中文内容分析。引用[2]详细说明了汉字匹配的正则表达式适用于汉字字符的提取[^2]。 - **代码示例**(Java): ```java import java.util.regex.*; Pattern pattern = Pattern.compile("[\u4e00-\u9fa5]+"); Matcher matcher = pattern.matcher("Hello 世界!"); while (matcher.find()) { System.out.println(matcher.group()); // 输出: "世界" } ``` #### 4. **匹配日期格式(如 YYYY-MM-DD)** - **模式**:`$\d{4}-\d{2}-\d{2}$` - **用途**:在数据导入或日志解析中,验证标准日期格式。匹配类似 "2023-10-05" 的字符串。 - **应用场景**:数据库输入校验、报告生成。引用[5]中提到,正则表达式简化了模式匹配,比传统代码更高效[^5]。 - **代码示例**(任何语言通用): - 测试字符串:`2023-10-05`. - 匹配结果:整个字符串被匹配。 #### 5. **匹配 URL 链接** - **模式**:`$https?://[^\s/$.?#]+\.[^\s]*$` - **用途**:在网页爬虫或内容管理系统中,提取或验证 HTTP/HTTPS URL。匹配以 "http://" 或 "https://" 开头的基本链接。 - **应用场景**:网络爬虫、用户输入过滤。引用[4]分析了 URL 匹配失败的原因,如忽略全局标志或贪婪匹配问题,建议使用非贪婪限定符如 `?`[^4]。 - **代码示例**(Python): ```python import re url_pattern = r'https?://[^\s/$.?#]+\.[^\s]*' text = "访问 https://example.com/page" print(re.search(url_pattern, text).group()) # 输出: https://example.com/page ``` #### 6. **匹配电话号码(国际格式)** - **模式**:`$\+?\d{1,3}[-.\s]?\d{3,4}[-.\s]?\d{4}$` - **用途**:验证用户输入的手机或座机号,支持格式如 "+86 13812345678" 或 "020-12345678"。 - **应用场景**:CRM 系统、联系人表单。引用[1]的规则(如 `\d{n}`)可用于定制不同长度的号码[^1]。 - **代码示例**(JavaScript): ```javascript const phoneRegex = /\+?\d{1,3}[-.\s]?\d{3,4}[-.\s]?\d{4}/; console.log(phoneRegex.test("电话: +1 800-555-1234")); // 输出: true ``` #### 总结 正则表达式在项目开发中至关重要,能显著提升文本处理效率。以上示例覆盖了常见场景,但实际使用时需根据语言特性调整(如 JavaScript 中的 `RegExp` 对象或 Python 的 `re` 模块)。引用[3]强调,掌握基本语法和调试技巧(如使用 `Pattern` 和 `Matcher` 类)可以避免常见错误[^3]。如果您有特定需求或语言环境,可以通过在线工具(如 regex101.com)测试和优化模式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值