笔记·正则表达
正则表达式
字符匹配
.:匹配任意单个字符;
[]:匹配指定范围内的任意单个字符;
[^]:匹配指定范围外的任意单个字符;
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:] 小写字母,示例:[[:lower:]],相当于[a-z]
[:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 包括空格、制表符(水平和垂直)、换行符、回车符等各种类型的空白,比[:blank:]包含的范围广
[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
[:digit:] 十进制数字
[:xdigit:]十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
\w #匹配单词构成部分,等价于[_[:alnum:]]
\W #匹配非单词构成部分,等价于[^_[:alnum:]]
\S #匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\s #匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。注意Unicode正则表达式会匹配全角空格符
匹配次数
*:匹配前面字符0次1次或多次;
.*:匹配任意长度的任意字符;
\?:匹配前面字符出现0次或1次;
\+:匹配前面字符1次或多次;
\{m\}:匹配前面字符m次;
\{m,n\}:匹配前面字符m到n次;
\{,n\}:至多n次;
\{m,\}:至少m次;
位置锚定
^:行首锚定;
$:行尾锚定;
^PATTERN$:用PATTERN来匹配整行;
^$:空白行;
^[[:space:]]*$:空行或包含空白字符的行;
\<或\b:单词首锚定;
\>或\b:单词尾锚定;
\<PATTERN\>:精确锚定单词;
分组及引用
\(\):将一个或多个字符捆绑,例如:\(xy\)*ab;
Note:分组括号中的模式匹配到的内容会被正则表达式引擎自动记录于内部的变量中,这些变量为:
\1:模式从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配的字符;
\2:模式从左侧起,第二个左括号以及与之匹配的右括号之间的模式所匹配的字符;
...
例如:grep "\(l..e\).*\1" file.txt
扩展正则表达式
字符匹配
.:匹配任意单个字符;
[]:匹配指定范围内的任意单个字符;
[^]:匹配指定范围外的任意单个字符;
次数匹配
*:匹配前面字符0次1次或多次;
?:匹配前面字符出现0次或1次;
+:匹配前面字符1次或多次;
{m}:匹配前面字符m次;
{m,n}:匹配前面字符m到n次;
{0,n}:至多n次;
{m,}:至少m次;
位置锚定
^:行首锚定;
$:行尾锚定;
\<或\b:单词首锚定;
\>或\b:单词尾锚定;
分组及引用
():分组,分组括号中的模式匹配到的内容会被正则表达式引擎自动记录于内部的变量中;
grep -E -o "[_[:alpha:]]+\(\)" /etc/fuctions
grep -E -o "[^/]+/?$" test.file //以斜线结尾的行且斜线前面是非斜线字符
ifconfig|grep -E -o "\<[1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]\>"
或
a|b:a或者b;
C|cat:C或cat
(C|c)at:Cat或cat