免费购物网站建设交换链接网站
简介
正则表达式分为两种语法:POSIX标准的语法,Perl语法。
正则表达式的POSIX规范,分为基本型正则表达式(Basic Regular Expression, BRE),扩展型正则表达式(Extended Regular Expression,ERE) 和SRE(Simple Regular Expression)已经被弃用(deprecated,因为BRE和SRE都可以backward compatibility)。
grep、vi、sed都属于BRE,元字符(metacharacter)需要转译(例如:在BRE中()和{}需要指定为\(\)和\{\}才可以使用,但是在ERE中则不需要进行转译)
egrep、awk属于ERE,元字符不需要转译
一个正则表达式通常称为一个模式(pattern)。
HINT! Perl语法被广泛使用!在grep中使用Perl语构的regex:grep -P
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)Windowsbr/>能匹配到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
维基百科:正则表达式
