正则表达式/POSIX 扩展正则表达式
外观
	
	
< 正则表达式
更高级的“扩展”正则表达式有时可以通过包含命令行标志“-E”在 Unix 工具中使用。其他 Unix 工具,如 awk,默认使用它。
主要区别在于一些反斜杠被移除:\{…\} 变为{…}以及 \(…\) 变为(…). 例子
- "[hc]+at" 与以下内容匹配:hat", "cat", "hhat", "chat", "hcat", "ccchat" 等。
- "[hc]?at" 与以下内容匹配:hat", "cat" 和 "at"
- "([cC]at)|([dD]og)" 与以下内容匹配:cat", "Cat", "dog" 和 "Dog"
字符(,),[,],.,*,?,+,|,^和$是特殊符号,必须使用反斜杠符号进行转义才能被视为文字字符。例如
- "a\.(\(|\))" 与字符串 " 匹配a.)" 或 "a.("
现代正则表达式工具允许将量词指定为非贪婪的,方法是在量词后添加问号:(\[\[.*?\]\]).
以下元字符被使用
| 元字符 | 描述 | 
|---|---|
| . | 匹配任何单个字符(许多应用程序不包括换行符,并且哪些字符被视为换行符是特定于风格、字符编码和平台的,但可以安全地假设换行符包含在内)。在 POSIX 方括号表达式中,点字符匹配一个文字点。例如, a.c匹配 "abc" 等,但[a.c]仅匹配 "a"、"." 或 "c"。 | 
| [ ] | 方括号表达式。匹配方括号内包含的单个字符。例如, [abc]匹配 "a"、"b" 或 "c"。[a-z]指定一个范围,匹配从 "a" 到 "z" 的任何小写字母。这些形式可以混合使用:[abcx-z]匹配 "a"、"b"、"c"、"x"、"y" 或 "z",[a-cx-z]也是如此。
 | 
| [^ ] | 匹配方括号内不包含的单个字符。例如, [^abc]匹配除 "a"、"b" 或 "c" 之外的任何字符。[^a-z]匹配任何不是从 "a" 到 "z" 的小写字母的单个字符。如上所述,文字字符和范围可以混合使用。 | 
| ^ | 匹配字符串内的起始位置。在线性工具中,它匹配任何行的起始位置。 | 
| $ | 匹配字符串的结束位置或字符串结束换行符之前的正位置。在线性工具中,它匹配任何行的结束位置。 | 
| BRE: \( \)ERE: ( ) | 定义一个标记的子表达式。括号内匹配的字符串可以稍后被调用(参见下一项, \n)。标记的子表达式也称为块或捕获组。 | 
| \n | 匹配第 n 个标记的子表达式所匹配的内容,其中 n 是从 1 到 9 的数字。从理论上讲,这个结构是不规则的,并且没有在 POSIX ERE 语法中采用。一些工具允许引用超过九个捕获组。 | 
| * | 匹配前面的元素零次或多次。例如, ab*c匹配 "ac"、"abc"、"abbbc" 等。[xyz]*匹配 ""、"x"、"y"、"z"、"zx"、"zyx"、"xyzzy" 等。\(ab\)*(在 BRE 中)或(ab)*(在 ERE 中)匹配 ""、"ab"、"abab"、"ababab" 等。 | 
| BRE: \+ERE: + | 匹配前面的元素一次或多次。例如, ab\+c(在 BRE 中)或ab+c(在 ERE 中)匹配 "abc"、"abbbc" 等,但不匹配 "ac",[xyz]\+(在 BRE 中)或[xyz]+(在 ERE 中)匹配 "x"、"y"、"z"、"zx"、"zyx"、"xyzzy" 等。\(ab\)\+(在 BRE 中)或(ab)+(在 ERE 中)匹配 "ab"、"abab"、"ababab" 等。 | 
| BRE: \?ERE: ? | 匹配前面的元素一次或零次。例如, ab\?c(在 BRE 中)或ab?c(在 ERE 中)匹配 "ac" 或 "abc",而\(ab\)\?(在 BRE 中)或(ab)?(在 ERE 中)匹配 "" 或 "ab"。 | 
| BRE: \|ERE: | | 匹配前面的元素或后面的元素。例如, abc\|def(在 BRE 中)或abc|def(在 ERE 中)匹配 "abc" 或 "def"。 | 
| BRE: \{m,n\}ERE: {m,n} | 匹配前面的元素至少 m 次,但不超过 n 次。例如, a\{3,5\}(在 BRE 中)或a{3,5}(在 ERE 中)仅匹配 "aaa"、"aaaa" 和 "aaaaa"。 | 
| BRE: \{m\}ERE: {m} | 匹配前面的元素正好 m 次。 | 
| BRE: \{m,\}ERE: {m,} | 匹配前面的元素至少 m 次。 | 
| BRE: \{,n\}ERE: {,n} | 匹配前面的元素不超过 n 次。例如, ba\{,2\}b(在 BRE 中)或ba{,2}b(在 ERE 中)仅匹配 "bb"、"bab" 和 "baab"。 | 
POSIX 标准定义了一些字符类或类别,如下表所示
| POSIX 类 | 类似于 | 含义 | 
|---|---|---|
| [:upper:] | [A-Z] | 大写字母 | 
| [:lower:] | [a-z] | 小写字母 | 
| [:alpha:] | [[:upper:][:lower:]] | 大写和小写字母 | 
| [:alnum:] | [[:alpha:][:digit:]] | 数字、大写和小写字母 | 
| [:digit:] | [0-9] | 数字 | 
| [:xdigit:] | [0-9A-Fa-f] | 十六进制数字 | 
| [:punct:] | [.,!?:…] | 标点符号 | 
| [:blank:] | [ \t] | 仅空格和制表符字符 | 
| [:space:] | [ \t\n\r\f\v] | 空白(空格)字符 | 
| [:cntrl:] | 控制字符 | |
| [:graph:] | [^\t\n\r\f\v] | 打印字符 | 
| [:print:] | [^ \t\n\r\f\v] | 打印字符和空格 | 
链接
- W:正则表达式#字符类
- 始终支持的字符类 在 boost.org 上
使用这种正则表达式语法的工具和语言包括
- AWK - 使用扩展正则表达式语法的超集
- POSIX 基本正则表达式 在 regular-expressions.info 上
- POSIX 扩展正则表达式语法 在 boost.org 上