首页 未命名正文

linux编程_正则表达式基础语法摘要

云返利网 未命名 2020-05-26 09:06:17 18 0

什么是正则表达式呢,先来看一下百度百科中的注释:

正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个观点。正则表通常被用来检索、替换那些相符某个模式(规则)的文本。

简朴来说,正则表达式是一种特定的模式,可以用来对文本举行匹配、替换或删除等操作。正则表达式自己与编程语言无关,是一种壮大的文本处理工具。

基础观点

正则表达式由两种字符组成:元字符通俗文本字符。其中,元字符 即正则表达式中的特殊字符,为正则表达式提供了壮大的形貌能力,如:*.

量词?, +, *。这三个元字符可以用来限制所作用元素的重现次数。
字符组:形如[Regex...]的表达式子句
贪心:如*字符。贪心量词会匹配尽可能多的字符串
非贪心模式:即尽可能少的匹配字符串,一样平常对表达式后加?即可实现

元字符总结

匹配单个字符

元字符 匹配工具
\d 匹配一个数字
\D 匹配一个非数字字符
\w 匹配一个数字、字母和下划线字符
\W 匹配一个非数字、字母或非下划线的字符
\s 匹配一个空白符字符,如空格和制表符
\S 匹配一个非空白符字符,如空格和制表符
. 匹配除换行符以外的随便单个字符
[...] 字符组,匹配括号中的随便一个字符
[^...] 清扫型字符组,匹配括号中未列出的随便一个字符
\Char Char是元字符,可以将其转义为对应的通俗字符举行匹配。如\.匹配一个“.”

有计数功效的元字符

元字符 匹配工具
匹配零次或一次
* 匹配随便多次,也可以不匹配
+ 匹配随便多次,但至少必须匹配一次
{min, max} 至少匹配min次,至多匹配max次。
{, max} 至少匹配0次,至多匹配max
{min, } 至少匹配min次,但匹配次数不设上限
{n} 匹配n

匹配位置的元字符

元字符 匹配工具
^ 匹配起始位置,当出现在字符组开头时,示意清扫(也可理解为取反)
$ 匹配末端位置
\b 匹配字符界限,但不会消耗字符,只匹配一个位置。如从"This is Regex"中匹配"is": \bis\b

其他

元字符 匹配工具
\ 匹配随便支解的表达式
(...) 限制多选结构的局限,标注量词作用的元素,可以为反向引用捕捉文本
\1, \2 ... 反向引用。匹配之前的第一,第二组括号内的表达式匹配到的文本

非贪心模式

举例:清溪路555号10号楼
匹配地址中的路号,首先可能会想到:.*(\d+)号.*,但实际上,前面的.*为贪心模式,会首先向后尽可能多的匹配,会导致小括号中的\d+只能匹配到10号楼中的0(由于是从左向右最先匹配,.*匹配用掉了太多的字符串,只留下一个数字0\d+举行匹配)。
若是想要匹配出555,则需要写成.*?(\d+)号.*,注重多了一个问号。这就是非贪心模式,问号前面的表达式会尽可能少的匹配,只要整个表达式匹配乐成即可。
基本上可以总结如下表达式:

元字符 匹配工具
*? 匹配随便次,但要尽可能少
+? 匹配1次或更多次,但要尽可能少
?? 匹配0次或1次,但要尽可能少
{min, max}? 匹配min到max次,但要尽可能少

分组

元字符 匹配工具
(exp) 匹配exp并捕捉匹配到的值到默认的组里
(?<name>exp) 匹配exp并捕捉值到name组中
(?:exp) 匹配exp,但不捕捉匹配到的值,也不给此组分配组号
(?=exp) 匹配exp前面的位置,如上面的地址,我们要提取小区地址,应该写成(.+?(?=\w+?号楼)),会匹配出清溪路555号
(?<=exp) 匹配exp后面的位置
(?!exp) 匹配后面不是exp的位置,如137(?!\d)匹配的是137开头的、非数字末端的字符串,例:137a
(?<!exp) 匹配前面不是exp的位置

【关于云返利网】

云返利网是阿里云、腾讯云、华为云产品推广返利平台,在各个品牌云产品官网优惠活动之外,云返利网还提供返利。您可以无门槛获得阿里云、华为云、腾讯云所有产品返利,在官网下单后就可以领取,无论是自己用、公司用还是帮客户采购,您个人都可以获得返利。云返利网的目标是让返利更多、更快、更简单!详情咨询13121395187(微信同号)