正则表达式

什么是正则表达式?

正则表达式(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

相关推荐

  • CentOS7 实现网卡绑定

    Bonding ;理念 将多块网卡绑定同一IP地址对外提供服务,可以实现高可用 或者负载均衡。直接给两块网卡设置同一IP地址是不可以的 。通过bonding,虚拟一块网卡对外提供连接,物理网卡的 被修改为相同的MAC地址 banding工作模式 Mode 0 (balance-rr) 轮转(Round-robin)策略: 从头到尾顺序的在每一个slave 接…

    2017-12-19
  • locate与find不得不说的事

    本文内容: locate与find 练习     locate与find是linux中最常用的两种查找方式,二者各有优缺点,locate查找迅速,却由于数据库非实时更新,导致可能查找不全,而find由于是从指定路径开始遍历,速度相对较慢,却更为准确,而且用法也更加灵活,因此find运用更加广泛,也是本文的重点。 文件查找: locate搜…

    Linux干货 2016-08-18
  • week4:grep命令正则表达式的应用

    1.复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其他用户均没有任何访问权限;     ~]# cp -r /etc/skel/ /home/tuser1 |chmod -R g-rwx,o-rwx /home/tuser1 2.编辑/etc/group文件,添加组hadoop; &…

    Linux干货 2016-11-23
  • DNS 主从协作及配置父子域实验

    实验:DNS主从协作及配置父子域实验 实验拓扑图 实验准备     1、所有主机关闭防火墙和selinux         service iptables stop       …

    Linux干货 2016-08-15
  • Memcached实现Tomcat的session会话绑定

    memcached介绍:  Memcached是一个高性能的分布式内存对称缓存系统;通过缓存查询数据库结果,介绍数据库访问次数,以提高web应用的速度、提高扩展性。  Memcached特点:   协议简单   基于libevent的事件处理   内置内存存储方式  memcached不互相通信的分…

    Linux干货 2015-08-01
  • grep、egrep、fgrep命令和正则表达式用法

    一、简介  1.1、grep说明    grep命令简单来说就是linux系统实现文本内容筛选过滤的命令。当我们需要快速定位查找文本(通常是配置文件)中我们需要的内容时,使用grep命令绝对算是最有效的处理方式之一。原因就在于grep可以配合包括“管道”、“正则表达式”等命令完成我们想要的关键字筛选过滤功能。个人认为不管是喜欢L…

    Linux干货 2015-08-31