​	

详见`man grep`的正则表达式那一章

[揭开正则表达式的神秘面纱](http://www.regexlab.com/zh/regref.htm)

##### 字符类和括号表达式

```
.				# 任意一个字符，但不包括\n和\r
[0123456789]	# 任意一个数字
[^0123456789]	# 任意一个非数字的字符
[0-9]			# 相当于[0123456789]
[:alnum:]		# 任意一个数字或字母，相当于[0-9A-Za-z]
[:alpha:]		# 任意一个字母
[:blank:]		＃ space和tab
[:cntrl:]		# 所有控制字符
[:digit:]		# 任意一个数字
[:graph:]		# 任意一个可打印且可看见的字符。（空格就是可打印但不可看到的字符）
[:lower:]		# 任意一个小写字母
[:print:]		# 任意一个可打印字符
[:punct:]		# 任意一个标点符号
[:space:]		# 任意一个空白字符。包括space,tab,\n,\r,\f。
[:upper:]		# 任意一个大写字母
[:xdigit:]		# 任意一个16进制数，相当于[0-9a-fA-F]
```



##### 锚定

```
^word		# 行首匹配
word$		# 行尾匹配
```



##### 反斜杠字符和特殊表达式

```
\<		# 单词开头的空字符串
\>		# 单词结尾的空字符串
\b		# 单词边缘的空字符串
\w		# 相当于[:alnum:]
\W		# 相当于[^_[:alnum:]]
\n		# 在vim里搜索的时候代表换行，在vim替换的时候代表0x00
\r		# 在vim里搜索的时候代表CR，在vim里替换的时候代表换行
```



##### 重复

```
*		# 匹配前面的表达式零次以上
+		# 匹配前面的表达式一次以上
?		# 匹配前面的表达式零次或一次
{}		# 一个数字表示匹配次数，两个数字表示匹配范围，带有名字时表示以此名字命名的模式
```



##### 连接

##### 交换

```
|		# 选择操作符。匹配此符号两边的任意一个字符串。
```



##### 优先级

```
()	# 形成一个新的表达式，拥有最高的优先级。
# 除了()，其它表达式的优先级次序：重复高于连接，连接高于交换。
```



##### 反向引用和子表达式

```
\n	# n为一个数字，匹配它前面的第n个带括号的表达式
```



##### 基本的和扩展的正则表达式

```
基本正则表达式里?, +, {, |, (, 和)失去特殊意义，应该用它们的反斜杠版本替代。
```

