正则表达式是什么?
由一类特殊字符及文本字符所编写的模式,其中有些元字符不表示字符字面意义,而表示控制或统配的功能.当然正则表达式适用于所有语言.
Linux中支持正则表达式的程序
grep,sed,awk,vim,less,nginx等
正则表达式的分类
基本正则表达式: BRE
扩展正则表达式: ERE
基本正则表达式
字符匹配
字符 | 意义 |
. | 匹配任意字符 |
[] | 匹配指定范围内的单个字符 |
[^] | 匹配指定范围外的单个字符 |
[:alnum:] | 匹配数字和字母 |
[:alpha:] | 匹配任何英文大小写字符 |
[:lower:] | 匹配小写字母 |
[:upper:] | 匹配大写字母 |
[:digit:] | 匹配十进制数字 |
[:xdigit:] | 匹配十六进制数字 |
[:space:] | 匹配水平和垂直的空白字符 |
[:blank:] | 匹配空白字符(制表符和空白格) |
[:graph:] | 匹配可打印的非空白字符 |
[:punct:] | 匹配标点符号 |
[:print:] | 匹配可打印字符 |
[:cntrl:] | 匹配不可打印的控制字符 |
匹配次数
用在指定次数的字符后面,用于指定前面的字符出现的次数.
字符 | 意义 |
* | 匹配前面的字符,任意次包括0次 |
.* | 匹配前面任意字符任意次数 |
\? | 匹配前面的字符0次或者1次 |
\+ | 匹配前面的字符至少1次 |
\{n\} | 匹配前面的字符n次 |
\{m,n\} | 匹配前面的字符至少m次,至多n次 |
\{,n\} | 匹配前面的字符至少出现n次 |
\{n,\} | 匹配前面的字符至多出现n次 |
位置锚定
定位出现的位置
字符 | 意义 |
^ | 行首锚定,用于模式最左侧 |
$ | 行尾锚定,用于模式最右侧 |
^PATTERN$ | 用于匹配整行 |
^$ | 匹配空行 |
^[[:space:]] | 匹配空行 |
\< 或 \b | 词首锚定,用于匹配单词模式最左侧 |
\> 或者 \b | 词尾锚定,用于匹配单词模式最右侧 |
\<PATTERN\> | 匹配整个单词 |
分组
将一个或者多个字符捆绑在一起,单做一个整体进行处理
1
2
3
4
5
|
\( \) 分组 \1 \2 分组的后向引用, \1 \2 调用第一个第二个分组匹配的结果,以最左边括号 如下: echo abc cc adc abc dd ace | grep -o "\(a.c\).*\1"
结果: abc cc abc abc
|
扩展正则表达式
简单来说就是去掉了转移符,是匹配模式更简便直观.
字符匹配
字符 | 意义 |
. | 任意单个字符 |
[] | 指定范围的单个字符 |
[^] | 不在指定范围的字符 |
匹配次数
字符 | 意义 |
* | 匹配前面的字符出现任意次数 |
? | 匹配前面的字符出现0次或者1次 |
+ | 匹配前面的字符0次或者1次 |
{n} | 匹配前面的字符出现n次 |
{m,n} | 匹配前面的字符出现至少m次至多n次 |
位置锚定
字符 | 意义 |
^ | 行首锚定 |
$ | 行尾锚定 |
\< 或 \b | 词首锚定 |
\> 或 \b | 词尾锚定 |
分组
1
2
|
() 分组 \1 \2 分组后向引用 |