正则表达式学习
约 696 字
预计阅读 2 分钟
次阅读
准备
准备个示例文件,内容如下,方便后期学习:
1
2
3
4
5
6
7
8
9
10
|
ac
abc
Abc
aBc
abC
1bc
a2c
ab3
a_c
a*c
|
匹配符
精确 or 模糊匹配
匹配符 |
说明 |
^ |
锚定开头 ^a 以a开头,默认锚定一个字符 |
$ |
锚定结尾 $a 以a结尾,默认锚定一个字符 |
- 如果两个一起使用,代表精确匹配
- 如果只是用其中一个,代表模糊匹配
EG:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
# egrep "^ac$" file
ac
# egrep "^a" file
ac
abc
aBc
abC
a2c
ab3
a_c
a*c
# egrep "c$" file
ac
abc
Abc
aBc
1bc
a2c
a_c
a*c
|
匹配字符串
匹配符 |
说明 |
. |
匹配除回车外任意字符 |
( ) |
字符串分组 |
[ ] |
定义字符类,匹配括号中的一个字符 |
[^] |
表示否定括号中出现的字符类中的字符,取反 |
\ |
转义字符 |
| |
或 |
EG:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
# egrep "^a.c$" file
abc
aBc
a2c
a_c
a*c
# egrep "^(a|1).c$" file
abc
aBc
1bc
a2c
a_c
a*c
# egrep "^a[0-9]c$" file
a2c
# egrep "^a[^0-9]c$" file
abc
aBc
a_c
a*c
# egrep "^a\*c$" file
a*c
|
限定符
匹配符 |
说明 |
* |
某个字符之后加星号表示该字符不出现或出现多次 |
? |
与星号类似,但是略有变化,表示该字符出现一次,或不出现 |
+ |
与星号类似,表示其前面字符出现一次或多次,但必须出现一次 |
{n,m} |
某个字符之后出现,便是该字符最少n次,最多m次 |
{m} |
正好出现了m次 |
EG:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
# egrep "^ab*c$" file
ac
abc
# egrep "^ab?c$" file
ac
abc
# egrep "^ab+c$" file
abc
# egrep "^ab{0,1}c$" file
ac
abc
# egrep "^ab{4,5}c$" file
# egrep "^ab{0}c$" file
ac
|
POSIX字符
特殊字符 |
说明 |
[:alnum:] |
匹配任意字母字符0-9 a-z A-Z |
[:alpha:] |
匹配任意字母,大写或小写 |
[:digit:] |
数字 0-9 |
[:graph:] |
非空字符(非空格控制字符) |
[:lower:] |
小写字符a-z |
[:upper:] |
大写字符A-Z |
[:cntrl:] |
控制字符 |
[:print:] |
非空字符(包括空格) |
[:punct:] |
标点符号 |
[:black:] |
空格和TAB |
[:xdigit:] |
16进制数字 |
[:space:] |
所有空白字符(新行、空格、制表符) |
- [ ]:双中括号的意思是,第一个中括号是匹配符 ,匹配中括号中的任意一个字符,第二个 是格式
EG:
1
2
3
4
5
6
7
|
# egrep "^a[[:alnum:]]" file
ac
abc
aBc
abC
a2c
ab3
|
简单应用
过滤ip地址
1
|
egrep "^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[1-9]).){4}" file
|