简介
正则表达式分为两种语法:POSIX标准的语法,Perl语法。
正则表达式的POSIX规范,分为基本型正则表达式(Basic Regular Expression, BRE),扩展型正则表达式(Extended Regular Expression,ERE)。
grep
、vi
、sed
都属于BRE,元字符需要转译
egrep
、awk
属于ERE,元字符不需要转译
一个正则表达式通常称为一个模式(pattern)。
HINT!
Perl语法被广泛使用!
POSIX(Portable Operating System Interface):是IEEE 计算机协会为保持操作系统之间的兼容性而制定的一系列标准。
Basic concepts
1. Boolean “or”
|
2. Grouping
()
3. Quantification
+
?
*
{n}
{min,}
{,max}
{min,max}
4. Wildcard
.
PCRE(Perl Compatible Regular Expression)
Perl兼容正则表达式,元字符介绍
Metacharacter | Description | Example |
---|---|---|
\ | 将下一个字符标记为一个特殊字符(File Format Escape)或一个原义字符(Identity Escape,有12个“^$()*+?.[\{ ”)等。 | “n ”字符匹配n 字符,“\n ”匹配一个换行符。" \\ “匹配一个“\ ”” \( "匹配一个“( ” |
^ | 匹配以某个字符串开始的行 | ^abc 匹配 abc 不匹配 eabc |
$ | 匹配以某个字符串结束的行 | abc$ 匹配 ef abc 不匹配 abc ef |
* | 匹配前面的子表达式0次或多次 | |
+ | 匹配前面的子表示1次或多次 | |
? | 匹配前面的子表示0次或1次 | |
{n} | 匹配n次 | o{2} 可以匹配到 food 中的两个o 不能匹配到 Bob 中的一个o |
{n,} | 至少匹配n次 | |
{n,m} | 匹配最少n次,最多m次 | |
? | 非贪心量化(Non-greedy quantifiers)。 其跟随在其他重复修饰符( *,+,?,{n},{n,},{n,m} )后面时,匹配模式是非贪婪的。 | |
. | 匹配除"\r ""\n "之外的任何单个字符 | |
(pattern) | 捕获组(capturing group)。 匹配pattern,并获取这一匹配的子字符串。该子字符串用于后向引用。 | (\(\w+\))\s\1 匹配 (hello) (hello) world 中的(hello) (hello) |
(?:pattern) | 非捕获组(non-capturing group)。 匹配pattern,不获取这一匹配的子字符串,非获取匹配。即不存储匹配的子字符串用于后向引用 | |
(?=pattern) | 正向肯定预查(look ahead positive assert)。 在匹配pattern处,开始匹配查找字符串,这是一个非捕获匹配。 | Windows(?=95|98|NT|2000) 匹配 Windows2000 中的Windows ;不匹配 Windows3.1 中的Windows 。 |
(?!pattern) | 正向否定预查(negative assert)。 在不匹配pattern处查找匹配字符串。 | industr(?!y) 匹配 industries 不匹配 industry |
(?<=pattern) | 反向(look behind)肯定预查。 与正向肯定预查相似,只是方向相反。 非捕获匹配。 | (?<=95|98|NT|2000)Windows 能匹配到 2000Windows 中的Windows 不能匹配到 Windows2000 中的Windows |
(?<!pattern) | 反向否定预查。 与正向否定预查相似,只是方向相反 | (?<!95|98|NT|2000)Windows br/>能匹配到3.1Windows 不能匹配到 2000Windows |
x|y | 没有包围在() 里,范围是整个正则表达式 | |
[xyz] | 字符集合(character class)。匹配包含的任意一个字符。 | “[abc] ”可以匹配 plain 中的a 可以匹配到 branch 中的"b " “a ” “c ” |
[^xyz] | 排除型字符集合(negated character classes)。匹配未列出的任意字符 | |
[a-z] | 字符范围。 | 可以匹配到不在“a ”到“z ”范围内的任意字符 |
[^a-z] | ||
\d | 匹配一个数字字符。等价于[0-9] | |
\D | 匹配一个非数字字符。等价于[^0-9] | |
\s | 匹配任何空白字符,包括空格,制表符,换页符等。等价于[\f\n\r\t\v] | |
\S | 匹配任何非空白字符。等价于[^\f\n\r\t\v] | |
\w | 匹配包括下划线的任何单词字符。等价于“[A-Za-z0-9] ” | |
\W | 匹配包括下划线的任何非单词字符。等价于“[^A-Za-z0-9] ” |
Reference
维基百科:正则表达式