基本定义: 由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能,类似于增强版通配符,但通配符用于处理文件名,而正则用于处理文本内容中的字符
广泛支持vim,less,grep,nginx,mysql等
正则表达式分为两类 :基本正则BRE,扩展正则ERE
正则元字符分类:字符匹配,匹配次数,位置锚定,分组
帮助: man 7 regex
一.基本正则元字符
1.字符匹配
. 匹配任意单个字符,可以是一个汉字
[] 匹配指定范围内的单个字符,例如:[abc] [0-9] [a-z] [a-zA-Z]
[^] 匹配指定范围外的任意单个字符,如[^abc]
[:alnum:] 字母和数字
[:alpha:] 任何英文大小写字母
[:lower:] 小写字母
[:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 说和垂直的空白字符(范围多于blank)
[:cntrl:] 不可打印的控制字符
[:digit:] 十进制数字
[:xdigit:] 十六进制数字
[:graph:] 可打印非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
2.匹配次数
用在要指定次数的字符后面,用于指定前面的字符要出现的次数
* 匹配前面的字符任意次,包括0次,即尽可能长的匹配
.* 任意长度的任意字符
\? 匹配其前面的字符0次或1次,即可有可无
\+ 匹配其前面的字符至少1次,即L肯定有,>=1
\{n\} 匹配前面的字符n次
\{m,n\} 匹配前面的字符至少m次,至多n次
\{,n\} 匹配前面的字符至多n次,<=n
\{n,\} 匹配前面的字符至少n次
3.位置锚定
用于定位出现的位置
^ 用于模式的最左侧
$ 行尾锚定,用于模式最右侧
^pattern$ 用于模式匹配整行(pattern:模式)
^$ 空行
^[[:space:]]*$ 空白行
\< 或 \b 词首锚定,用于单词模式的左侧
\> 或 \b 词尾锚定,用于单词模式的右侧
\<pattern\> 匹配整个单词
4.分组
() 将多个字符捆绑在一起,当作一个整体处理
后向引用: 分组括号中的模式匹配到的内容会被正则表达式引擎记录在内部变量中,这些变量的命名方式为:\1 \2 \3...
例:
5.其他
\| 或者,例如:
a\|b a或b
C\|cat C或cat
\(C\|c\)at Cat或cat
二.扩展正则表达式
简化了一些正则表达式的输入方式