正则表达式

什么是正则表达式?

正则表达式(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)
上一篇 2017-06-01 17:56
下一篇 2017-06-01 21:23

相关推荐

  • 正则表达式

    1:什么是正则表达式: 简单的说,正则表达式就是处理字符串的方法,它是以行为单位进行字符串的处理行为,正则表达式通过一些特殊符号的辅助,可以让用户轻易达到查找,删除,替换某特定字符串的处理程序。 2:一些参数: grep [-A] [-B] [–color=auto] ‘收索字符串’ filename -A :后面可加数字…

    2017-07-29
  • N25第一周博客作业

    本周加班很多,视频未看完,下周补上

    Linux干货 2016-12-04
  • Trie树:应用于统计和排序

    1. 什么是trie树 1.Trie树 (特例结构树)         Trie树,又称单词查找树、字典树,是一种树形结构,是一种哈希树的变种,是一种用于快速检索的多叉树结构。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少…

    Linux干货 2015-04-08
  • Nginx+resin调优文档[原创]

    为什么不选择Apache/mod+resin?       前面一直使用该模式,mod_caucho暴露源码的bug一直未得到彻底的解决。因此切换到Nginx+resin平台。硬件上要求除了内存一定要足够大(建议>4G),无其它要求(当然也不能太破,呵呵)。操作系统强烈要求安装64位,32位操…

    Linux干货 2015-03-27
  • Linux哲学思想

    一、一切皆文件     1、将所有资源都抽象成文件形式;     2、几乎可以通过读写文件的形式,操作所有的系统资源。 二、由一个一个的小程序组成,且每一个小程序只做一件事情,并且只做好该件事情即可     1、一个小程序只做好一件事情,即…

    Linux干货 2016-09-19
  • CIDR,子网掩码以及划分子网超网

    对于中小企业,假如有两千台机器,给他分个B类地址,6万多个,太浪费了,分个C类地址,一个C类地址254个,又不够,又得多申请几个,所以A,B,C类IP地址划分太过僵硬,很不灵活,因此又提出无类域间路(CIDR)由划分IP地址的方法。 无类域间路由(CIDR) 传统划分IP地址的方法都是8位划分的,要不就是前8位网络ID,后24位主机ID;或前16位网络ID,…

    2017-09-16