正则表达式必知必会

本文详细介绍了正则表达式的各种匹配规则,包括单字符、任意字符、一组字符、取非、元字符、数字匹配、字母数字匹配、空白字符、重复匹配、边界匹配、子表达式、回溯引用、替换操作以及向前和向后查找等。旨在帮助读者理解和掌握正则表达式的高效使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

在工作中使用正则表达式可以提高我们的效率,这篇博客就是一篇字典类型的博客,需要的时候回来看即可。但我尽量避免死记硬背。(学习书籍----《正则表达式必知必会》)

匹配单个字符

如果匹配单个字符的话,直接输入要查找的内容即可:
匹配字符“hello”,直接搜索即可:
在这里插入图片描述

匹配任意字符

匹配任意字符可使用符号“.”,它可以代替任何一个符号
匹配字符“hello”,前后使用“.”来代替:
在这里插入图片描述

匹配一组字符

匹配一组字符可以使用“[]”,它的含义是只要这一个字符在这个中括号当中,就可以被匹配到。
匹配a到d的text,如下操作:
在这里插入图片描述
也可以直接输入[a-d] 表示a到d之前的任意一个符号都可以被匹配到
在这里插入图片描述
数字也可以使用区间符号“-”进行匹配,如下匹配带有字母和数字的两个字的文本:
在这里插入图片描述
一个集合里可以支持多个区间,如下匹配a到f或者1到3的一个字的文本:
在这里插入图片描述

取非匹配

如果我们想避免匹配到某些字符,可以使用符号“^”,表示不匹配这些区间里的任意一个字符,注意:这个符号只有在区间里表示取非。
匹配纯字母的文本,忽略掉数字:
在这里插入图片描述

元字符

元字符的概念是无法用它本身来表示它本身,需要进行转义,因为它是用来描述其他正则规则的,如果要想匹配元字符,就需要特殊处理。
比如上面的区间符号[],如果要想直接匹配是行不通的,如下并没有匹配成功:
在这里插入图片描述
针对匹配元字符的场景,需要使用转义符“\”。
如下操作即可匹配成功:
在这里插入图片描述
同理,“\”本身也是元字符,匹配的时候也需要使用“\”转义
在这里插入图片描述

匹配数字

\d表示匹配所有数字(digit)
\D表示匹配所有非数字,在正则中,小写对应的大写都是取非的意思。
匹配所有数字:
在这里插入图片描述
匹配所有非数字
在这里插入图片描述

匹配所有字母和数字

\w 匹配所有字母+数字(word)
\W 匹配所有非字母+数字
匹配所有字母+数字:
在这里插入图片描述
匹配所有非字母+数字
在这里插入图片描述

匹配空白字符

\s 表示匹配所有空白符号 (space)
\S 表示匹配所有非空白符号
匹配所有空白字符:
在这里插入图片描述
匹配所有非空白字符:
在这里插入图片描述

重复匹配

“+” 表示匹配一个或者多个字符(至少一个)
匹配my后面加上任意几个数字的文本:
在这里插入图片描述
“+”表示至少匹配一个
“*”表示匹配0个或多个,类似sql 中的select * … 意味着也可以没有
匹配my后面加上任意几个数字(也可以没有数字)的文本:
在这里插入图片描述“?”表示匹配0个或1个字符,最多出现一次
匹配my后面加上1个数字(也可以没有数字)的文本:
在这里插入图片描述

"{}“可以给重复匹配设立一个精确的值,想要匹配几次,“{}”里填入对应的数字即可。
匹配数字出现3次的文本:
在这里插入图片描述
除了上面使用的方法外,”{}"还可以设立一个区间,比如“{2,4}” 表示出现至少2次,最多3次。
匹配数字出现至少1次,最多3次的文本:
在这里插入图片描述
除此之外,“{}” 还可以匹配至少出现几次,“{2,}” 表示至少出现几次,但最多没有上限(但是反过来不会生效,即匹配最多次,不需匹配最少次)。
匹配数字出现至少2次,最多N次的文本:
在这里插入图片描述

避免过度匹配

“*” 符号可以匹配多个,但有时会出现过度匹配的情况,如下,我想匹配所有的txt文本,但是会从头匹配到尾,会包含中间的空格
在这里插入图片描述
出现上述原因是因为开头是my, 结尾是txt,所以就都会匹配上。
解决方法可以使用“ *?” ,在“ * ” 后面加一个“?”,表示避免匹配过度,该含义是 只会匹配每一个以my开头,txt结尾的文本。
在这里插入图片描述
“ * ” 表示贪婪匹配,“ *?” 表示懒惰型匹配,常用的几个贪婪型匹配和对应的懒惰型匹配如下:

贪婪型懒惰型
**?
++?
{n,}{n,}?

边界匹配

“\b” 可以匹配单词的边界 (border)它可以独立出一个单词
我想匹配如下文本中的所有cat 单词,如果直接匹配的话,效果如下:
在这里插入图片描述
不符合我的预期,会匹配其他包含cat字母的单词;可以加上 \b ,表示对要搜索的单词加上一个边界:
在这里插入图片描述
相反,“\B”可以去除单词的边界
在这里插入图片描述

字符串边界

“^”表示匹配字符串的开头
“$”表示匹配字符串的结尾
匹配所有以a开头d结尾的文本行:
在这里插入图片描述

子表达式

“()”表示子表达式,它可以实现复用,将“()”里面的的内容抽出来,作为独立的元素来使用。
匹配下面的ip:
在这里插入图片描述
这个解释下:
(\d{1,3}.) 把1到3位的数字加上一个.作为一个子表达式
{3} 表示前面的子表达式连续出现了3次,也就是ip地址的前3组数字
\d{1,3}表示匹配ip的最后一组数字

再举一个例子,找出所有19世纪和20世纪的出生人的年份:
在这里插入图片描述
(19|20)表示19或者20开头,把它作为一个子表达式
\d{2}表示后面跟随2位数字

回溯引用

回溯引用的概念是模式的后半部父引用在前半部分中定义的子表达式。
找出单词连续出现两次的文本:
在这里插入图片描述
[ ]+(\w+)[ ]+ 表示匹配空格+多个字符+空格 中间的多个字符是一个子表达式
\1 表示再续上一个和前面第1个子表达式一模一样的内容

再举一个例子
如下匹配所有对应html内容:
在这里插入图片描述
(<[h]\d>)是一个子表达式,匹配开头
.*匹配所有中间内容
\1 表示前面的第1个子表达式的内容在这里再出现一次。
这样就会过滤掉最后一个标签,因为它开头是H3,结尾是H2,不符合预期。
\1 就表示前面的第1个子表达式,\n就表示前面的第n个子表达式

回溯引用中的替换操作

回溯引用不仅可以用来搜索,还可以用来替换。需要两个正则表达式,一个用来搜索,一个用来替换之前的文本,第一个模式里的子表达式可以在第二个模式里使用。

将所有电话的开头加上括号:
在这里插入图片描述
结果:
在这里插入图片描述
当匹配出来之后,用“$n” 来表示第一个模式中的第n个子表达式。

向前查找

有些时候,被匹配的单词并不是我们想要的,我们只是拿它作为一个边界,但搜索出来的内容不应该包含它。

向前查找实际上是一个子表达式,是以“?=”开头的,需要匹配的文本跟在“=”的后面。
匹配http 或https,但是不包括后面的“:”
在这里插入图片描述
.* 表示匹配开头
(?=:)是向前查找,查找到“:”即可,但是不包含“:”,只是“:”之前的即可,所以叫向前查找。

向后查找

?<=
向后查找相对于向前查找来说增加了一个“<”,含义为查找小于“=”后面的内容,即向后查找。
在这里插入图片描述

感谢您的观看,欢迎一起探讨。

### 回答1: 《正则表达式必知必会pdf》是一本关于正则表达式的学习资料。正则表达式(Regular Expression,简称Regex)是一种高级的字符串匹配工具,广泛应用于文本处理、搜索引擎、数据清洗等领域。这本PDF提供了学习正则表达式的基本知识和实例应用。 首先,这本PDF会从正则表达式的基础开始介绍,包括元字符(metacharacters)、字符类(character class)、重复限定符(repetition qualifier)等。它会教你如何使用这些元素来构建具有特定匹配规则的表达式。 其次,PDF会详细介绍正则表达式的常见应用场景,比如提取URL、邮箱地址、手机号码等。它通过实例演示了如何利用正则表达式来完成这些任务,帮助你更好地理解和掌握正则表达式的使用方法。 此外,这本PDF还会讲解一些高级的正则表达式技巧,比如分组和捕获、反向引用等。这些技巧可以进一步提升你处理复杂文本的能力,让你能够更加灵活地应用正则表达式。 总的来说,《正则表达式必知必会pdf》是一本系统全面介绍正则表达式的学习资料。它不仅适合初学者入门,也适合有一定经验的开发人员深入学习。通过学习这本PDF,你可以更加熟练地运用正则表达式,提高文本处理的效率和准确性。 ### 回答2: 《正则表达式必知必会.pdf》是一本关于正则表达式的指南,它是为那些希望学习和掌握正则表达式的人们而设计的。 首先,正则表达式是一种强大的文本匹配工具,它可以用来在文本中查找、替换和验证特定的模式。这在计算机编程和数据处理领域中非常有用。《正则表达式必知必会.pdf》通过简明易懂的方式,介绍了正则表达式的基础知识和常用的语法规则。 在这本书中,作者首先介绍了正则表达式的基本概念,如字符、元字符、字符类和量词等。然后,他详细讲解了如何使用正则表达式进行模式匹配和替换操作。通过大量的实例和练习,读者可以逐步理解和掌握正则表达式的使用方法。 除了基本的语法规则外,这本书还介绍了一些高级的技巧和实用的应用场景。例如,如何在正则表达式中使用分组、引用和捕获;如何处理特殊字符和转义序列等。这些内容可以帮助读者更好地应对各种复杂的文本处理需求。 总的来说,《正则表达式必知必会.pdf》是一本很好的入门教材。它将复杂的概念和技巧以简洁明了的方式呈现出来,适合各个层次的读者阅读和学习。无论是初学者还是有经验的开发人员,都可以从中获得很大的帮助并提高他们的文本处理能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值