正则表达式语法大全(常用正则表达式超强整理,你一定可以使用它提高工作效率)

正则表达式,又称规则表达式。正则表达式的英语为:Regular Expression,常简写为regex、regexp或RE,是计算机科学中的一个概念。正则表达式是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本,许多计算机程序设计语言也都支持利用正则表达式进行字符串操作。正则表达式用于字符串处理、表单验证等场合,实用高效,所以我们很有必要去掌握它,本文梳理一些工作中常用的正则表达式,以备不时之需。

本文通过Linux系统中的grep命令来学习正则表达式,当grep与正则结合在一起时,grep就会根据正则表达式的含义在文本中查找出符合条件的字符串。

位置匹配

测试文件1内容如下:

# cat reg1 hello everyone I am laoliang Linux hello Linux   I likeLinuxverymuch!

^”表示锚定行首,匹配输入字符串的开始位置。比如”^hello”表示只匹配位于行首的hello字符串。

$”表示锚定行尾,匹配输入字符串的结尾位置。比如”hello$”表示只匹配位于行尾的hello字符串。

”^”与”$”分别代表锚定行首与锚定行尾,那么,我们将它们结合在一起使用,”^Linux$”表示Linux既位于行首,同时也位于行尾,换句话说,就是整行中只有一个单词Linux。

那么”^$”表示什么意思呢?”^$”就表示行首与行尾相连,换句话说就是空行。”-n”参数可以显示行号,可以看到第5行空行被匹配到了。

<”表示锚定词首。”<lao”表示以lao作为词首的单词将会被匹配到。

>”表示锚定词尾。”liang>”表示以liang作为词尾的单词将会被匹配到。

同理,我们也可以将”<“与”>”结合在一起使用,”<am>”表示当am既是词首又是词尾时则会被匹配到,换句话说,就是当am作为一个独立的单词时,则会被匹配到。

正则表达式中,除了”<“与”>”能够表示锚定词首与锚定词尾以外,我们还可以使用”b”去代替”<“和”>”,”b”既能锚定词首,也能锚定词尾,示例如下:

B”则与”b”正好相反,”B”是用来匹配非单词边界的,如下”BLinux”表示只要Linux不是词首就会被匹配到,同理”LinuxB”表示只要Linux不是词尾就会被匹配到。

次数匹配

测试文件2内容如下:

正则表达式语法

# cat reg2 a a a aa aaa aaaaabbb ab abc abcc eaf bf eccf ef eef eeefffff

{n}” 表示前面的字符连续出现n次,将会被匹配到。比如”a{2}”表示a连续出现两次就会被匹到。

{x,y}”表示之前的字符连续出现的次数在x与y之间,将会被匹配到。比如”a{2,4}”表示连续出现2次,3次,4次a字母将会被匹配。

*”表示之前的字符连续出现任意次数(包括0次),将会被匹配到。比如”e*f”表示ef中间e出现任意次将会匹配。

.”表示匹配任意单个字符。比如”ee..”表示ee后面跟随任意两个字符都会被匹配到,”空格”也算作单个字符所以也会被匹配。

.*”可以理解为”.”与”*”的结合,表示连续出现任意次的任意单个字符,换句话说就是匹配任意长度的任意字符。比如”a.*”表示a字母后面存在任意长度的任意字符都可以被匹配到。

?”表示匹配其前面的字符0或1次,也就是前面的字符要么没有要么有一个。比如”abc?”表示ab后面c出现0次或者1次都会被匹配到。

+”表示匹配其前面的字符至少1次,也就是前面的字符必须有至少一个。比如”abc+”表示ab后面c至少要出现1次才会被匹配到。

字符匹配

测试文件3内容如下:

# cat reg3            a a123 a123b a123$ a123bc456 abcdefg aBdCeFg aBCD a1a3 a#@!

[[:alpha:]]” 表示匹配任意字母(不区分大小写)。比如"a[[:alpha:]]{3}"表示只有a字母后面跟随了3个字母的字符串才会被匹配到。还有一种方式”[a-zA-Z]”也能表示任意字母。

[[:lower:]]”表示匹配任意小写字母。比如"a[[:lower:]]{3}"表示只有当a后面的3个字符均为小写字母时,才会被匹配到。还有一种方式”[a-z]”也能表示任意一个小写字母。

[[:upper:]]”表示匹配任意大写字母。比如"a[[:upper:]]{3}"表示只有当a后面的3个字符均为小写字母时,才会被匹配到。还有一种方式”[A-Z]”也能表示任意一个大写字母。

[[:digit:]]” 表示匹配任意数字。比如"a[[:digit:]]{3}"表示只有当a后面的3个字符均为数字时,才会被匹配到。还有一种方式”[0-9]”也能表示任意一个数字。

[[:alnum:]]” 表示匹配任意数字或字母。比如"a[[:alnum:]]{3}"表示当a后面的3个字符为数字或字母时会被匹配到。还有一种方式”[a-zA-Z0-9]”与之等效。

我们可以把上面[[:alpha:]]等拆成两部分理解:

  • 第一部分:最外层的[ ],表示指定范围内的任意单个字符;
  • 第二部分:最内层的[:alpha:],表示不区分大小写的字母。

[ ]”就表示匹配指定范围内的任意单个字符的意思。比如"a[bB#3]"表示a后面是b或B或#或3都可以匹配到。

[^ ]”表示匹配指定范围外的任意单个字符,它与”[ ]”的含义正好相反。比如“[^0-9]”表示匹配单个非数字字符,与[0-9]的含义这正好相反。

转义符

测试文件4内容如下:

# cat reg4 abc a!@# a...bc a*bc

”与正则中的符号结合在一起时,就表示这个符号本身的含义。比如”.”在正则表达式中代表任意单个字符,如果我们需要匹配字母a后面两个.就需要用到转义符””

案例

我们需要从ifconfig命令的结果中找出IPv4格式的IP地址,正则表达式可以如下进行编写:

([0-9]{1,3}.){3}[0-9]{1,3}

这里可以分为三部分进行理解:

  • 第一部分”([0-9]{1,3}.)”表示一个最少为1位数字,最多为3位数字的字符串,并且这个字符串后面跟随了一个”.”,我们把这个带有点的数字字符串当做一个整体。
  • 第二部分”{3}”表示之前的字符需要连续出现3次,当它与第一部分的正则结合在一起时,表示符合第一部分正则的字符串需要连续出现3次。
  • 第三部分的正则为”[0-9]{1,3}”表示一个最少为1位数字,最多为3位数字的字符串。

这样我们就匹配出来了IP地址。

以上就是关于正则表达式的介绍了,相信在工作中你一定会用到它!

您可以还会对下面的文章感兴趣

最新评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

使用微信扫描二维码后

点击右上角发送给好友