基础正则表达式

基础正则表达式

元字符 作用
* 前一个字符匹配 0 次或任意多次。
. 匹配除了换行符外任意一个字符。
^ 匹配行首。例如:^hello 会匹配以 hello 开头的行。
$ 匹配行尾。例如:hello$ 会匹配以 hello 结尾的行。
[] 匹配中括号中指定的任意一个字符,只匹配一个字符。
例如:[aoeiu]匹配任意一个元音字母,[0-9]匹配任意一位数字,[a-z][0-9]匹配小写字和一位数字构成的两位字符。
[^] 匹配除中括号的字符以外的任意一个字符。例如:[^0-9] 匹配任意一位非数字字符,[^a-z] 表示任意一位非小写字母。
\ 转义符。用于将特殊符号的含义取消。
\{n\} 表示其前面的字符恰好出现 n 次。例如:[0-9]\{4\} 匹配 4 位数字,[1][3-8][0-9]\{9\} 匹配手机号码。
\{n,\} 表示其前面的字符出现不小于 n 次。例如:[0-9]\{2,\} 表示两位及以上的数字。
\{n,m\} 表示其前面的字符至少出现 n 次,最多出现 m 次。例如:[a-z]\{6,8\} 匹配 6 到 8 位的小写字母。

? 和 () 是扩展正则

匹配练习参考文件内容:

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
27
28
29
30
31
[root@localhost ~]# vim test.txt 
a
aa
aaa
aaaa
aaaaa.

xcu
xccu
xcccu
xccccu
xcccccu

said
soid
suud
sooooood.
12345
5678
7832
bbbbbbbbbb44445bbbb
6aaaaaaaaaaaa

ab
aabb

b
bb
bbb
bbbb
bbbbb

“*”前一个字符匹配 0 次,或任意多次

“a*”

  • #匹配所有内容。包括空白行

    “aa*”

  • #匹配至少包含有一个 a 的行

    “aaa*”

  • 匹配最少包含两个连续 a 的字符串

    “aaaaa*”

  • #匹配最少包含四个连续 a 的字符串

    “.”匹配除了换行符外的任意一个字符

    “s..d”

  • #“s..d”会匹配在 s 和 d 这两个字母之间一定有两个字符的字符串

    “s.*d”

  • #匹配在 s 和 d 字母之间有任意字符的字符串

    “.*”

  • #匹配所有内容

    “^”匹配行首,“$”匹配行尾

    “^M”

  • #匹配以大写“M”开头的行

    “n$”

  • #匹配以“n”结尾的行

    “^$”

  • #匹配空白行

    “[]”匹配中括号中指定的任意一个字符,只匹配一个字符

    “s[ao]id”

  • #匹配 s 和 i 字母中的任意一个字符,要么是 a,要么是 o

    “[0-9]”

  • #匹配任意一个数字

    “^[a-z]”

  • #匹配用小写字母开头的行

    “[^]”匹配除中括号的字符以外的任意一个字符

    “^[^a-z]”

  • #匹配不用小写字母开头的行

    “^[^a-zA-Z]”

  • #匹配不用大写或小写字母开头的行
  • #在 php 中可以用“^[^A-z]”匹配不用大写或小写字母开头的行,因为在 php 语言中,大写字母排在小写字母前面,但在 Linux 中不行

    “\”转义符

    “\.$”

  • #匹配使用“.”结尾的行
  • #“.$”匹配以任意字符结尾的行

    “\{n\}”表示其前面的字符恰好出现 n 次,若没有加定界符,则会匹配 n 次及 n 次以上

    “a\{3\}”

  • #匹配 a 字母连续出现三次的字符串,包含了三次以上

    “xc\{3\}u”

  • #匹配 x 和 u 之间恰好出现三次 c 的字符串,x 和 u 为定界字符

    “[0-9]\{3\}”

  • #匹配包含连续的三个数字的字符串,恰好匹配需要定界符

    “\{n,\}”表示其前面的字符出现不小于 n 次

    “^[0-9]\{3,\}[a-z]”

  • #匹配最少用连续三个数字开头的行

    “\{n,m\}”匹配其前面的字符至少出现 n 次,最多出现 m 次

    “xc\{2,3\}u”

  • #匹配在字母 x 和字母 u 之间有最少一个 c,最多三个 c

    例子:

    grep “[0-9]\{4\}-[0-9]{2\}-[0-9]{2\}” 文件

  • 从文档中匹配规范的日期格式

    grep “[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}”

  • #从文档中向外提取 ip 地址,但并不是精确匹配 ip