看完之后,写正则表达式再也不是让我头疼的问题了

本文主要讲解正则表达式的基本使用方法。正则表达式用一个字符串描述特征,可用于验证、查找和替换字符串。它定义了一系列规则,元字符具有特殊意义。还介绍了常用表达式属性设置,如Ignorecase、Singleline等。

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

引言

不管在学习哪一门程序设计语言都会用到正则表达式,它已经融入到计算机的方方面面,本文主要讲解正则表达式的最基本使用方法。

正则表达式(regular expression)就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征。比如 表达式“ab+” 描述的特征是“一个‘a’ 和 任意个’b’,那么’ab,‘abb’,'abbbb’都符合这个特征。
正则表达式可以用来:
(1)验证字符串是否符合指定特征,比如验证是否是合法的邮件地址。
(2)用来查找字符串,从一个长的文本中查找符合指定特征的字符串,比查找固定字符串更加灵活方便。
(3)用来替换,比普通的替换更强大。
正则表达式学习起来其实是很简单的,不多的几个较为抽象的概念也很容易理解。之所以很多人感觉正则表达式比较复杂,一方面是因为大多数的文档没有做到由浅入深地讲解,概念上没有注意先后顺序,给读者的理解带来困难;另一方面,各种引擎自带的文档一般都要介绍它特有的功能,然而这部分特有的功能并不是我们首先要理解的。

正则表达式中的元字符

正则表达式定义了一系列的“规则”,比如正则表达式中使用\d表示任意单个数字,使用这些规则,可以用于强大的匹配需求。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符。只要弄清楚了“数字字母等常见组成”“次数表示”“子组”等方式,就可以轻松掌握正则表达式的用法。

简单的转义字符

表达式可匹配
\r, \n代表回车和换行符
\t制表符

正则表达式中的元字符

记号说明示例示例解释
literal匹配该字符thisthis
re1|re2|为管道符,表示多选一Wuhan|ChangshaWuhan或Changsha
常用.除换行符外的任何字符a.baab,a9b,a?b…
\d任意数字,同[0,9],和\D是反义\d{11}11为数字,如手机号
\D非数字字符\D{5}含5个非数字的字符串
\w匹配任何数字、字母和[A-Za-z0-9]同义,和\W反义\w+数字和字母构成的字符串均可匹配
\W非数字字母
\s匹配空白符,和[\n\t\r\v\f]相同,和\S相反
\S非空白符号
范围[…]括号中任何一个字符[asdf]a,s,d,f任何一个
[x,y]匹配x到y的字符,可以有多个区间[0-9]匹配任一数字
[^…]不匹配出现在^后面的任何一个字符[^asdf]不是a,s,d,f的任何一个
边界^匹配行的开始,多行模式匹配模式时,可匹配任意行的开头^Dear以Dear开头的字符串
$匹配行的结束,如果最后是个换行符号,以这个换行符前面的字符为准,多行模式可以匹配任意行的结尾txt$以txt结尾的字符串
\b匹配单词边界\bthe\b匹配the,不匹配there或together
\A仅匹配整个字符串的开始,不支持多行模式\Aabc整个字符串以abc开头,匹配不上xyz\nabc
\Z仅匹配整个字符串的结束,不支持多行模式匹配def\Z整个字符串以def结尾,匹配不上def\nxyz
次数*前面的内容出现0次到多次5*0个或多个5
+前面的内容出现1次到多次a+1个或多个a
?前面的内容出现0次或1次N?0个或1个N
{N}前面的内容出现N次X{5}5个X
{M,N}前面的内容出现M到N次W{2,5}2到5个W
非贪婪(次数)?,(*|+|?{})?次数后面加个问号表示非贪婪匹配,即找出长度最小且符合要求的“.+?”匹配引号引起来的部分,比如"a"b"c",如果左边的正则表达式中没有问号,则会贪婪匹配整个这个字符串。但左边的正则表达式中有问号,因此只会匹配上"a"和"c"
子组(正则表达式)圆括号中匹配的内容会保存为子组(或称为子模式)([0-9]{3})三个数字,构成一个子组
(?P…)命名的子组(?P\w+)子组名称为name
\子组编号匹配以保存的子组,参考上面的(正则表达式)(\w+)\1两个词连续出现
(?: )虽然用括号括起来,但不算做子组(?:jilin | wuhan) universityjilin university 或 wuhan university
\取消通配符特殊含义\.匹配字符.本身

常用的表达式属性设置简介:Ignorecase,Singleline,Multiline,Global

表达式属性说明
Ignorecase默认情况下,表达式中的字母是要区分大小写的。配置为 Ignorecase 可使匹配时不区分大小写。有的表达式引擎,把 “大小写” 概念延伸至 UNICODE 范围的大小写。
Singleline默认情况下,小数点 “.” 匹配除了换行符(\n)以外的字符。配置为 Singleline 可使小数点可匹配包括换行符在内的所有字符。
Multiline默认情况下,表达式 “^” 和 “KaTeX parse error: Undefined control sequence: \n at position 37: …置。如:①xxxxxxxxx②\̲n̲③xxxxxxxxx④配置为 …” 匹配 ④ 外,还可以匹配换行符之前,一行结束 ② 的位置。
Global主要在将表达式用来替换时起作用,配置为 Global 表示替换所有的匹配。

参考文档:

揭开正则表达式的神秘面纱 http://www.regexlab.com/zh/regref.htm
《Django开发从入门到实践》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值