RE
在线检测:
RE分为BRE(basic RE), ERE(extended RE), SRE(simpla RE).
在BRE中+?(){}|没有特殊含义,除非用\转义.
在ERE中+?(){}被保留有特殊含义,除非用\转义才表示普通字符.
命令find, grep, sed, awk等都可以使用正则表达式.
特殊字符含义:
() 对正则表达式分组, ERE
\n 再匹配前面的分组n次
. 匹配任意单个字符, 换行符除外
^tux 匹配以tux开始的行
tux$ 匹配以tux结束的行
*+?{}特殊字符是贪婪匹配模式,也就是尽可能多的匹配
* 匹配前面一个字符0次或多次,包括前面这个字符本身
+ 匹配前面一个字符1次或多次,包括前面这个字符, ERE
? 匹配前面一个字符0次或1次,包括前面这个字符, ERE
{n} 匹配前面一个字符n次,包括前面这个字符, ERE
{min,} 匹配前面一个字符至少min次,包括前面这个字符, ERE
{min,max} 匹配前面一个字符至少min次,最多max次,包括前面这个字符, ERE
下面是非贪婪匹配模式
*? 匹配0个或多个
+? 匹配1个或多个
?? 匹配0个或1个
{n}? 只匹配n个
{min,}? 至少min个
{min,max}? 至少min个,最多max个
[abc] 匹配包含在[]中的任意一个字符,除了\, ^, -三个特殊字符
[^abc] 匹配不包含在[]中的任意一个字符(和上面相反)
[a-z] 匹配[]中指定范围内的任意一个字符
[abc\?] 用\转义[]中的特殊字符
| 表示逻辑或, ERE
\ 转义字符,将特殊字符转义成普通字符
小括号表示分组
(...)
(?...)
(?iLmsux)
(?:...)
(?P<name>...)
(?P=name)
(?#...)
(?=...)
(?!...)
(?<=...)
(?<!...)
(?(id/name)yes-pattern|no-pattern)
匹配前面一个字符0次,包括前面这个字符,也就是说0次表示不匹配前面这个字符.
字符集:
下列字符集是posix标准,用在[]中,也就是[[:alnum:]].
[:alnum:] 可打印的字符,包括空白字符
[:alpha:] 字母字符
[:blank:] 空格和制表符,space, \t
[:cntrl"] 控制字符
[:digit:] 数字字符
[:graph:] 图形字符,不包括空白字符
[:lower:] 小写字符
[:print:] 可打印字符,包括空白字符
[:punct:] 标点符号字符
[:space:] 空白字符
[:upper:] 大写字符
[:xdigit:] 十六进制字符
字符集的简写(不同的编程语言可能不同):
\b 匹配单词边界
\B 匹配单词的非边界
\A 匹配字符串的起始
\Z 匹配字符串的结束
\d 匹配任何数字0-9
\D 匹配任何非数字,等效[^\d]
\w 匹配任何数字和字母,a-z,A-Z,0-9
\W 匹配任何非数字和非字母
\s 匹配任何空白字符,包括space,\t,\n,\r,\f
\S 匹配任何非空白字符
\h 匹配横向空白,包括space,\t
\v 匹配纵向空白,包括\f,\r,\n
\r 回车
\R 匹配任何类型的断行
\a
\f
\t
\n
常用正则表达式
.* 匹配任意字符0次或多次,除了换行符
^$ 匹配空白行
[\s\S] 匹配任何空白字符和非空白字符
^\s\+ 行首空格
\s\+$ 行尾空格
^[^<] 不以<开头的字符串