什么是正则表达式?
正则表达式(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