{{ cat }}'s docs

12.1.0: 正则基础-编码符号含义


1. 前言介绍

正规表示法并不是某种工具独占的用法 它是一种很重要且流行的字符串处理方法

2. 特殊编码

不同的编码对正规表示法的抓取字符会有影响, 但下面这些特殊符号的意义是确定的

特殊符号 代表意义
[:alnum:] 代表英文大小写字节及数字,亦即 0-9, A-Z, a-z
[:alpha:] 代表任何英文大小写字节,亦即 A-Z, a-z
[:blank:] 代表空白键和[Tab]按键
[:cntrl:] 代表键盘上面的控制按键,即 CR, LF, Tab, Del.. 等
[:digit:] 代表数字而已,即 0-9
[:graph:] 除了空白字节 (空白键与 [Tab] 按键) 外的其他所有按键
[:lower:] 代表小写字节,亦即 a-z
[:print:] 代表任何可以被打印出来的字节
[:punct:] 代表标点符号 (punctuation symbol),即:" ' ? ! ; : # $...
[:upper:] 代表大写字节,亦即 A-Z
[:space:] 任何会产生空白的字节,包括空白键, [Tab], CR 等等
[:xdigit:] 代表16进制的数字类型,包括: 0-9, A-F, a-f 的数字与字节

POSIX标准正则编码与其他用法的对应表格

POSIX Non standard Perl Tcl Vim ASCII
[:alnum:] [A-Za-z0-9]
[:word:] \w \w [A-Za-z0-9_]
\W \W [^A-Za-z0-9_]
[:alpha:] \a [A-Za-z]
[:blank:] \s [ \t]
\b \< > (?<=\W)(?=\w)丨(?<=\w)(?=\W)
[:cntrl:] [\x00-\x1F\x7F]
[:digit:] \d \d [0-9]
\D \D [^0-9]
[:graph:] [\x21-\x7E]
[:lower:] \l [a-z]
[:print:] \p [\x20-\x7E]
[:punct:] [][!"#$%&'()*+,./:;<=>?@\^_`{丨}~-]
[:space:] \s \_s [ \t\r\n\v\f]
\S \S [^ \t\r\n\v\f]
[:upper:] \u [A-Z]
[:xdigit:] \x [A-Fa-f0-9]

不存在于POSIX标准字符之中的字符含义

  • [:word:]/\w - Alphanumeric characters plus "_"
  • \W - Non-word characters
  • \b/\< \> - Word boundaries
  • \D - Non-digits
  • \S - Non-whitespace characters

2. 基础正规表示法字符汇整

RE 字符 含义与例子
^word ## 以word开头的行
## 查找行首为"#"开始的那一行,并列出行号
grep -n '^#' regular_express.txt
word$ ## 以word结尾的行
## 查找行尾为"!"的那一行,并列出行号
grep -n '!$' regular_express.txt
. ## 代表『一定有一个任意字节』的字符!
## 查找"e"+"任意一个字符,包括空格"+"e"的字符串
grep -n 'e.e' regular_express.txt
|## 脱义字符,将特殊符号的特殊意义去除!
## 查找含有单引号 ' 的那一行!
grep -n \' regular_express.txt
* ## 重复零个到无穷多个的前一个 RE 字符
## 找出含有 (es) (ess) (esss) ...的字串
grep -n 'ess' regular_express.txt
## 因为
可以是 0 个,所以 es 也是符合带搜寻字串。
## 另外,因为 为重复『前一个 RE 字符』的符号,因此,在 之前必须要紧接著一个 RE 字符!例如任意字节则为 『.*』 !
[list] ## 字节集合的 RE 字符,里面列出想要选择的字节!
## 搜寻含有 (gl) 或 (gd) 的那一行
grep -n 'g[ld]' regular_express.txt
## 需要特别留意的是,在 [] 当中『谨代表一个待搜寻的字节』, 例如『 a[afl]y 』代表搜寻的字串可以是 aay, afy, aly 即 [afl] 代表 a 或 f 或 l 的意思!
[n1-n2] ## 字节集合的 RE 字符,里面列出想要撷取的字节范围!
## 搜寻含有任意数字的那一行!
grep -n '[A-Z]' regular_express.txt
## 需特别留意,在字节集合 [] 中的减号 - 是有特殊意义的,他代表两个字节之间的所有连续字节!但这个连续与否与 ASCII 编码有关,因此,你的编码需要配置正确(在 bash 当中,需要确定 LANG 与 LANGUAGE 的变量是否正确!) 例如所有大写字节则为 [A-Z]
[^list] ## 字节集合的 RE 字符,里面列出不要的字串或范围!
## 搜寻的字串可以是 "oo"+"任意一个字符",除了"oot"
grep -n 'oo[^t]' regular_express.txt
## 那个 ^ 在 [] 内时,代表的意义是『反向选择』的意思。 例如,我不要大写字节,则为 [^A-Z]。但是,需要特别注意的是,如果以 grep -n [^A-Z] regular_express.txt 来搜寻,却发现该文件内的所有行都被列出,为什么?因为这个 [^A-Z] 是『非大写字节』的意思, 因为每一行均有非大写字节,例如第一行的 "Open Source" 就有 p,e,n,o.... 等等的小写字
{n,m} ## 连续 n 到 m 个的『前一个 RE 字符』
## 若为 {n} 则是连续 n 个的前一个 RE 字符,
## 若是 {n,} 则是连续 n 个以上的前一个 RE 字符!
## 在 g 与 g 之间有2到3的 o 存在的字串,亦即 (goog)(gooog)
grep -n 'go{2,3}g' regular_express.txt

3. 扩展正规表示法

RE 字符 含义和例子
+ ## 重复『一个或一个以上』的前一个 RE 字符
## 搜寻 (god) (good) (goood)... 等等的字符串
egrep -n 'go+d' regular_express.txt
? ## 『零个或一个』的前一个 RE 字符
## 搜寻 (gd) (god) 这两个字串。
egrep -n 'go?d' regular_express.txt
## 'go+d' 与 'go?d'的结果集合与 'go*d' 相同
## 用或( or )的方式找出数个字串
## 搜寻 gd 或 good 这两个字串
egrep -n 'gd丨good' regular_express.txt
egrep -n 'gd丨good丨dog' regular_express.txt
() ## 找出『群组』字串
## 搜寻 (glad) 或 (good) 这两个字串
egrep -n 'g(la丨oo)d' regular_express.txt
()+ ## 多个重复群组的判别
## 用echo打印『AxyzxyzxyzxyzC』,然后查找A和C中间包含1或多个xyz的判别
echo 'AxyzxyzxyzxyzC' 丨 egrep 'A(xyz)+C'

ASCII码表:

ASCII Hex Symbol
0 0 NUL
1 1 SOH
2 2 STX
3 3 ETX
4 4 EOT
5 5 ENQ
6 6 ACK
7 7 BEL
8 8 BS
9 9 TAB
10 A LF
11 B VT
12 C FF
15 F SI
14 E SO
16 10 DLE
17 11 DC1
18 12 DC2
19 13 DC3
20 14 DC4
21 15 NAK
22 16 SYN
23 17 ETB
24 18 CAN
25 19 EM
26 1A SUB
27 1B ESC
28 1C FS
29 1D GS
30 1E RS
31 1F US
32 20 (space)
33 21 !
34 22 "
35 23 #
36 24 $
37 25 %
38 26 &
39 27 '
40 28 (
41 29 )
42 2A *
43 2B +
44 2C ,
45 2D -
46 2E .
47 2F /
48 30 0
49 31 1
50 32 2
51 33 3
52 34 4
53 35 5
54 36 6
55 37 7
56 38 8
57 39 9
58 3A :
59 3B ;
60 3C <
61 3D =
62 3E >
63 3F ?
64 40 @
65 41 A
66 42 B
67 43 C
68 44 D
69 45 E
70 46 F
71 47 G
72 48 H
73 49 I
74 4A J
75 4B K
76 4C L
77 4D M
78 4E N
79 4F O
80 50 P
81 51 Q
82 52 R
83 53 S
84 54 T
85 55 U
86 56 V
87 57 W
88 58 X
89 59 Y
90 5A Z
91 5B [
92 5C \
93 5D ]
94 5E ^
95 5F _
96 60 `
97 61 a
98 62 b
99 63 c
100 64 d
101 65 e
102 66 f
103 67 g
104 68 h
105 69 i
106 6A j
107 6B k
108 6C l
109 6D m
110 6E n
111 6F o
112 70 p
113 71 q
114 72 r
115 73 s
116 74 t
117 75 u
118 76 v
119 77 w
120 78 x
121 79 y
122 7A z
123 7B {
124 7C
125 7D }
126 7E ~
127 7F

Contents