正则表达式

正则表达式

正则表达式,又称规则表达式,(Regular Expression,在代码中常简写为regex、regexp或RE),是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"),是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式(规则)的文本。
  许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开来的,后来在广泛运用于Scala 、PHP、C# 、Java、C++ 、Objective-c、Perl 、Swift、VBScript 、Javascript、Ruby 以及Python等等。正则表达式通常缩写成"regex",单数有regexp、regex,复数有regexps、regexes、regexen。

用法

符号 作用
$ 匹配结束符号,例如表达式/abc/g,匹配字符串abc是可以匹配上的,因为匹配完c后结束符号也匹配上了,如果匹配abcd,那么就和d进行匹配,匹配失败
( ) 可以改变表达式的优先级,例如表达式/ab+/g,因为+号优先级高,所以这个表达式可以匹配ab、abb、abbb...,加了括号后/(ab)+/g,所匹配的就是ab、abab、abab...
* 星号前的表达式可以重复匹配0次至无限次,例如表达式/ab*/g,可以匹配a、ab、abb、abbb...
+ 加号前的表达式可以重复匹配1次至无限次,例如表达式/ab+/g,可以匹配ab、abb、abbb...,但是不可以匹配a,因为+号至少匹配一次
[ ] []中括号可以限制匹配单个字符的字符集,例如 [0-9] 代表匹配的这个字符可以是0、1、2...9,也可以匹配多个种字符 [a-z0-9],代表匹配的这个字符可以是a-z也可以是0-9
? ?号前的表达式可以匹配0次或一次,例如表达式/ab?/g,只能匹配a和ab
\ 转义字符,如果需要匹配()\^{}等特殊符号,可以这样使用:\\、\(、\)、\^等等
^ 在正常表达式中,匹配开始字符,例如表达式/^abc/g匹配abc是可以匹配成功的,但是匹配dabc是匹配不成功的,因为a不是开始字符。在 [ ] 表达式中,^表示非的意思,例如 [^0-9] 代表匹配的这个字符不能是数字
{ } { }是限制符号,可以在里面添加限制条件,下面{n}、{n,}详细介绍
| 或者符号,例如 [a|b] 代表匹配的字符可以是a或者b
{n} 可以重复匹配前面的表达式 n 次,例如/ab{2}/g,那么只能匹配abb
{n,} 至少重复匹配前面的表达式 n 次,例如/ab{2,}/g,那么可以匹配abb、abbb、abbbb...
{n,m} 重复匹配前面的表达式 n 到 m 次,例如/ab{2,4}/g,那么只可以匹配abb、abbb、abbbb
\n 匹配一个换行符
\r 匹配一个回车符
\t 匹配一个制表符,tap符号
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v,匹配的字符只能是 \f、\n、\r、\t、\v这些字符。
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v],^是非的意思,匹配的字符不能是 \f、\n、\r、\t、\v这些字符
\b 匹配一个单词边界,即字与空格间的位置。例如/\bab/g,匹配gg abhab的时候,只能匹配成功第一个ab,而第二个匹配不成功,因为\b没有匹配到边界单词
\B 非单词边界匹配,例如/\bab/g,匹配gg abhab的时候,只能匹配成功第二个ab,而第一个匹配不成功,因为\B没有匹配到非边界单词
exp1(?=exp2) 查找 exp2 前面的 exp1
(?<=exp2)exp1 查找 exp2 后面的 exp1
exp1(?!exp2) 查找后面不是 exp2 的 exp1
(?<!exp2)exp1 查找前面不是 exp2 的 exp1

个人理解

正则表达式在一定程度上可以方便开发,使用场景也是非常多的,例如使用linux命令查找文件,对文件内容进行查找、替换等操作,在开发判断参数的合法性等等,只需要使用简单的表达式就可以达到效果,而不需要额外去写程序

但对比于一些复杂的问题不建议使用正则表达式去解决,例如检验密码是否符合以下要求:

至少8位最多16位,至少出现三种类型的字符

如果要写正则表达式去匹配,是不太容易的,即使写出来,保证这个表达式的正确性又是很大的问题,除非熟练掌握了正则表达式

而用代码去实现的话,就非常容易实现,思路清晰,后期维护也简单

所以,不应该滥用正则表达式,使用正则表达式只是为了方便开发,如果使得开发变得复杂就得不偿失了

相关推荐
Lenyiin8 小时前
《 C++ 点滴漫谈: 四十 》文本的艺术:C++ 正则表达式的高效应用之道
c++·正则表达式·lenyiin
AA-代码批发V哥8 小时前
Java正则表达式完全指南
java·正则表达式
coding随想1 天前
JavaScript中的正则表达式:文本处理的瑞士军刀
javascript·mysql·正则表达式
OldField-Tian1 天前
Qt中使用正则表达式来提取字符串
qt·正则表达式
datascome2 天前
简数采集技巧之快速获取特殊链接网址URL方法
前端·经验分享·爬虫·程序人生·正则表达式
WebCsDn_TDCode2 天前
正则表达式检测文件类型是否为视频或图片
javascript·正则表达式·音视频
小陶来咯2 天前
【仿muduo库实现并发服务器】使用正则表达式提取HTTP元素
服务器·http·正则表达式
超级韩逗逗3 天前
正则表达式笔记
笔记·正则表达式
村里大明白3 天前
第七章.正则表达式
python·正则表达式
雷神乐乐4 天前
Oracle正则表达式学习
数据库·sql·oracle·正则表达式