-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path第 09.02.01.01 章、regexp_syntax 包
142 lines (103 loc) · 4.35 KB
/
第 09.02.01.01 章、regexp_syntax 包
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
regexp/syntax 包
定义和处理 正则表达式 本身的语法
正则表达式语法
单一字符:
. 任何字符,可能包含 newline(flag s=true)
[xyz] 包含指定字符中的某一个
[^xyz] 不包含指定字符中的任何一个
\d Perl 定义的字符
\D 不含任何 Perl 定义的字符
[[:alpha:]] ASCII 定义的字符
[[:^alpha:]] 不含 ASCII 定义的字符
\pN 单个 Unicode 字符
参见 http://www.regular-expressions.info/unicode.html Unicode Categories 部分
\p{Greek} 指定语言下的单个 Unicode 字符
参见 http://www.regular-expressions.info/unicode.html Unicode Script 部分
中文为 {Han}
\PN 不含 Unicode 字符
\P{Greek} 不含指定语言下的 Unicode 字符
复合字符串:
xy x 后跟随 y
x|y x 或 y(优先匹配 x)
重复字符:
x* 0 个或多个 x,优先匹配最多数量
x+ 1 个或多个 x,优先匹配最多数量
x? 0 个或 1 个 x,优先匹配 1 个
x{n,m} 重复 n 至 m 个 x,优先匹配最多数量
x{n,} 至少重复 n 个 x,优先匹配最多数量
x{n} 重复且仅重复 n 个 x
x*? 0 个或多个 x,优先匹配最少数量
x+? 1 个或多个 x,优先匹配最少数量
x?? 0 个或 1 个 x,优先匹配 0 个
x{n,m}? 重复 n 至 m 个 x,优先匹配最少数量
x{n,}? 至少重复 n 个 x,优先匹配最少数量
x{n}? 重复且仅重复 n 个 x
#### 由于某些原因 x{n,m} x{n,} x{n} 最多仅能匹配上 1000 个重复
打组:
(re) 具有编号的捕获组(次级匹配)
(?P<name>re) 具有编号和名称的捕获组(次级匹配)
(?:re) 非捕获组
(?flages) 为当前组设置 flags,本身为非捕获组
(?flags:re) 在执行 re 时,设置的 flags,本身为非捕获组
flags 的设置可以是 xyz (全含) -xyz (全不含) xy-z (含 xy 不含 z):
i 忽略大小写(默认为 false)
m 多行模式: ^ 和 $ 除了匹配 文本起止,还匹配每行的开始和结尾(默认为 false)
s 让 . 可以匹配 \n (默认为 false)
U 非贪婪模式,也就是反转 x* 和 x*? , x+ 和 x+? 等的含义
空字符串:
^ 文本开始处,或者行开始处(flag m=true)
$ 文本结束处,或者行结束处(flag m=true)
\A 文本开始处
\b ASCII 字符串边界(一侧是 \w,另一侧是 \W、\A 或者 \z)
\B 非 ASCII 字符串边界
\z 文本结尾
转义字符:
\a 响铃符(== \007)
\f 换页符(== \014)
\t 水平制表符(== \011)
\n 换行符(== \012)
\r 回车符(== \015)
\v 竖直换行符(== \013)
\* 表示一个星号 * 本身
\123 八进制数(最多三位)
\x7F 十六进制数(固定两位)
\x{10FFFF} 十六进制数
\Q...\E 期间字符全部解读为普通字符串
字符集元素
x 单一字符
A-Z 包含两端的字符范围
\d Perl 字符集
[:foo:] 标号为 foo 的 ASCII 字符集
\p{Foo} 标号为 Foo 的 Unicode 字符集
\pF 标号为 F 的Unicode 字符集
与字符集元素等价的字符集
[\d] 数字(== \d)
[^\d] 非数字(== \D)
[\D] 非数字(== \D)
[^\D] 不为非数字(== \d)
[[:name:]] 命名过的 ASCII 字符集(== [:name:])
[^[:name:]] 不含命名过的 ASCII 字符集(== [:^name:])
[\p{Name}] 命名过的 Unicode 字符集(== \p{Name})
[^\p{Name}] 不含命名过的 Unicode 字符集(== \P{Name})
Perl 字符集(全部仅指 ASCII 字符)
\d 数字(== [0-9])
\D 非数字(== [^0-9])
\s 白空格(== [\t\n\f\r ])
\S 不含白空格(== [^\t\n\f\r])
\w 字符(== [0-9A-Za-z_])
\W 不含字符(== [^0-9A-Za-z_])
ACSII 字符集
[[:alnum:]] 英文字符和数字(== [0-9A-Za-z])
[[:alpha:]] 英文字符(== [A-Za-z])
[[:ascii:]] ASCII 定义的范围(== [\x00-\x7F])
[[:blank:]] 空白(== [\t ])
[[:cntrl:]] 控制符(== [\x00-\x1F\x7F])
[[:digit:]] 数字(== [0-9])
[[:graph:]] 图示字符(== [!-~] == [A-Za-z0-9!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~])
[[:lower:]] 小写字符(== [a-z])
[[:print:]] 可打印字符(== [ -~] == [ [:graph:]])
[[:punct:]] 标点符号(== [!-/:-@[-`{-~])
[[:space:]] 白空格(== [\t\n\v\f\r ])
[[:upper:]] 大写字符(== [A-Z])
[[:word:]] 字(== [0-9A-Za-z_])
[[:xdigit:]] 十六进制数字(== [0-9A-Fa-f])