正则表达式

什么是正则表达式?

正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为”元字符”)。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,许多程序设计语言都支持利用正则表达式进行字符串操作。正则表达式是烦琐的,但它是强大的,学会之后的应用会让你除了提高效率外,会给你带来绝对的成就感。正则表达式默认工作在贪婪模式即尽可能长的匹配。
REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能
程序支持:grep,sed,awk,vim, less,nginx,varnish等
正则表达式按照模式的不同分两类:基本正则表达式:BRE、扩展正则表达式:ERE
元字符分类:字符匹配、匹配次数、位置锚定、分组
也可以 man 7 regex查看正则表达式的帮助文档

基本正则表达式

字符匹配

元字符 含义
. 匹配任意单个字符
[] 匹配指定范围内的任意单个字符([abcd]匹配abcd其中的任任意一个字符)
[ ^ ] 匹配指定范围外的任意单个字符符([^abcd]:abcd以外的任意字符)
[:upper:] 表示任意的大写字母
[:alnum:] 表示任意字母和数字符
[:alpha:] 代表任何英文大小写字符A-Z, a-z
[:lower:] 表示小写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
[:cntrl:] 不可打印的控制字符(退格、删除、警铃…) )
[:digit:] 十进制数字符
[:xdigit:] 十六进制数字符
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号

匹配次数

用在要指定次数的字符后面,用于指定前面的字符要出现的次数

元字符 含义
. 匹配任意单个字符
* 匹配 前面的字符任意次,包括0次
.* 任意 长度的任意字符
\? 匹配 其前面的字符0 或1次
\+ 匹配 其前面的字符至少1次
\{n\} 匹配 前面的字符n次
\{m,n\} 匹配 前面的字符至少m 次,至多n次
\{,n\} 匹配 前面的字符至多n次
\{n,\} 匹配 前面的字符至少n次

位置锚定

元字符 含义
^ 行尾锚定,用于模式的最左侧
$ 行尾锚定,用于模式的最右侧
^PATTERN$ 用于模式匹配整行
^$ 空行
^[[:space:]]*$ 空白行
\>或\b 词首锚定,用于单词模式的左侧
\<或\b 词尾锚定;用于单词模式的右侧
\<PATTERN\> 匹配整个单词

分组

\(\)将一个或多个字符捆绑在一起,当作一个整体进行处理
(root)+分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3等
例如: (string1+(string2)*\)
\1 :string1+(string2\)*
\2 :string2
后向引用是引用前面的分组括号中的模式所匹配字符 , 而非模式本身
或者:\|
示例:a\|b: a 或b 、C\|cat: C 或cat、 \(C\|c\ )at:Cat 或cat

扩展正则表达式

扩展正则表达式 ERE Extended Regular Expressions 比基本正则表达式BRE 拥有更强大的功能,语法看起来更加简洁。

扩展正则的字符匹配

元字符 含义
. 匹配任意单个字符
[] 匹配[]指定范围内的任意单个字符
[ ^] 匹配[]指定范围外的任意单个字符符
[:upper:] 任意的大写字母
[:alnum:] 字母和数字符
[:alpha:] 代表任何英文大小写字符 A-Z, a-z
[:lower:] 任意的小写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
[:cntrl:] 不可打印的控制字符(退格、删除、警铃…) )
[:digit:] 十进制数字符
[:xdigit:] 十六进制数字符
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号

扩展正则的匹配次数

用在要指定次数的字符后面,用于指定前面的字符要出现的次数

元字符 含义
. 匹配任意单个字符
* 匹配 前面的字符任意次,包括0次
.* 任意 长度的任意字符
? 匹配 其前面的字符0 或1次
+ 匹配 其前面的字符至少1次
{n} 匹配 前面的字符n次
{m,n} 匹配 前面的字符至少m 次,至多n次
{,n} 匹配 前面的字符至多n次
{n,} 匹配 前面的字符至少n次

扩展正则的位置锚定

元字符 含义
^ 行尾锚定,用于模式的最左侧
$ 行尾锚定,用于模式的最右侧
^PATTERN$ 用于模式匹配整行
^$ 空行
^[[:space:]]*$ 空白行
\>或\b 词首锚定,用于单词模式的左侧
\<或\b 词尾锚定;用于单词模式的右侧
<string> 匹配整个单词

原创文章,作者:geekdeedy,如若转载,请注明出处:http://www.178linux.com/77348

(0)
geekdeedygeekdeedy
上一篇 2017-06-01 17:56
下一篇 2017-06-01 21:23

相关推荐

  • vim编辑器-练习题

    1 、复制/etc/profile至/tmp/目录,用查找替换命令删除/tmp/profile文件中的行首的空白字符 #cp /etc/profile /tmp #vim /tmp/profile :%s/^[[:space:]]\+// 2 、复制/etc/rc.d/init.d/functions 文件至/tmp 目录,用查找替换命令为/tmp/func…

    Linux干货 2016-08-15
  • git

    1.1 Git的安装 1.1.1 版本 # cat /etc/redhat-release CentOS release 6.8 (Final) # uname -r 2.6.32-642.4.2.el6.x86_64 # uname -m x86_64 1.1.2 安装 可以直接通过源码安装。先从Git官网下载源码,然后解压,…

    Linux干货 2016-10-31
  • Windows和Linux关于一块网卡绑定多个网络地址的解决之道

    Windows和Linux关于一块网卡绑定多个网络地址的问题解决之道   在不同场合用不同ip地址访问网络,而且都是固定ip。是一件很头疼的问题。不过,Windows和Linux系统都提供了解决方法。接下来我们先谈Windows系统下操作,再说Linux如何操作。 一、Windows设置   1. 我以Windows7为例,首先鼠标左键点击你电脑左下角有网络…

    Linux干货 2016-09-07
  • 系统时间与硬件时间

    1. “系统时间”与“硬件时间”    系统时间: 一般说来就是我们执行 date 命令看到的时间,linux系统下所有的时间调用(除了直接访问硬件时间的命令)都是使用的这个时间。    硬件时间: 主板上BIOS中的时间,由主板电池供电来维持运行,系统开机时要读取这个时间,并根…

    Linux干货 2016-08-05
  • Linux基础知识(三)-用户管理组管理,正则grep,文本处理

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,只显示一次即可。 2、取出最后登录到当前系统的用户的相关信息。 3、取出当前系统上被用户当作其默认shell的最多的那个shell。 4、将/etc/passwd中的第三个字段数值最大的后10个用户的信息全部改为大写后保存至/tmp/maxusers.txt文件中 5、取出当前主机的IP…

    Linux干货 2016-10-09