正则表达式

什么是正则表达式?

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

相关推荐

  • 网络服务基础理论

    最近学习了有关网络管理的有关知识,所以给也在学习这些知识的童鞋分享一下我的一些经验。 听了这几天课,总结了几个前提。 有关网络的通信均是基于数据传输的,且数据均是二进制格式的流式数据。 在网络中需要把大包分成小包, 每传一个包都需要有三个地址,由内向外为端口号、IP地址、MAC地址。端口号确定应用,IP确定网段,MAC确定广播域中的某个网卡。 OSI模型 &…

    Linux干货 2017-09-01
  • 如何解决生产机上php代码连接mysql报错的故障

    大家好: 今天分享一则当生产机上的网站php代码不能连接Mysql服务器时怎么办? 当LNMP的网站建立好后,我们需要测试网站中的php代码。但发现如下报错怎么办? 解决方法如下:  mysql> show databases; +——————–+ | Dat…

    Linux干货 2016-12-18
  • 编译内核

     编译内核: 步骤: (1) 准备好开发环境 (2) 获取目标主机上硬件设备的相关信息 (3) 获取目标主机系统功能的相关信息         例如:需要启用相应的文件系统 (4) 获取内核源代码包 www.kernel.org  

    Linux干货 2018-01-01
  • 魔术方法

    魔术方法 属性 含义 __name__ 类、函数、方法等的名字 __module__ 类定义所在的模块名 __class__ 对象或类所属的类 __bases__ 类的基类的元组,舒徐为他们在基类列表中出现的顺序 __doc__ 类、函数的文档字符串,如果没有定义则为None __mro__ 类的mro,class.mro()返回的结果保存在__mro__中…

    Linux干货 2017-11-21
  • 文件查找命令find

      在文件系统上常常需要根据文件的各种属性去查找符合条件的文件。在Linux下也有相当优异的查找命令。今天只要将find和locate。find通常不常用,因为速度慢!通常我们先使用locate来进行模糊查找,如果真找不到了,才以find来查找。为什么呢?因为locate是利用数据库来查找数据,所以速度非常快,而且并没有实际查询硬盘比较省时间。 l…

    Linux干货 2016-08-22
  • Linux基础知识(五)-文件查找命令find

    对grep 和 find 命令的操作 1、显示当前系统上root、fedora或user1用户的默认shell; 2、找出/etc/rc.d/init.d/functions文件中某单词后面跟一组小括号的行,形如:hello(); 3、使用echo命令输出一个路径,使用grep取出其基名; 4、找出ifconfig命令结果中的1-255之间数字; 5、写一个…

    Linux干货 2016-10-24