正则表达式(Regular Expressions)
完成条件
POSIX 基本正则表达式(BRE)
POSIX Basic Regular Expression(BRE) 语法提供了一些扩展,使 grep
、sed
和 awk
等 Unix 工具之间的正则表达式保持一致。然而,这些扩展在某些传统 Unix 工具的实现中并不受支持。
历史
传统 Unix 正则表达式的语法遵循不同工具之间的常见约定,但这些约定在不同工具之间可能有所不同。IEEE 开发了 POSIX 基本正则表达式(BRE)和 POSIX 扩展正则表达式(ERE)标准,以提供向后兼容性,并使 Unix 正则表达式工具遵循相同的标准。目前,POSIX 语法已成为许多 Unix 工具的默认语法。
语法
在 POSIX 基本正则表达式(BRE)语法中,大多数字符被视为字面量,即它们只匹配自己。例如:
"a"
只匹配"a"
"b"
只匹配"b"
元字符(Metacharacters)
元字符 | 描述 |
---|---|
. |
匹配任意单个字符(通常不包括换行符) |
[ ] |
字符类,匹配括号内任意一个字符,如 [abc] 匹配 "a" , "b" , "c" |
[^ ] |
反向字符类,匹配不在括号内的字符,如 [^abc] 匹配 "d" , "e" 但不匹配 "a" , "b" , "c" |
^ |
匹配字符串的起始位置 |
$ |
匹配字符串的结束位置 |
* |
匹配前一个元素 0 次或多次,如 ab*c 可匹配 "ac" , "abc" , "abbc" 等 |
\{m\} |
匹配前一个元素恰好 m 次,如 a\{3\} 仅匹配 "aaa" |
\{m,\} |
匹配前一个元素至少 m 次,如 a\{3,\} 匹配 "aaa" , "aaaa" , "aaaaa" ... |
\{m,n\} |
匹配前一个元素至少 m 次,至多 n 次,如 a\{3,5\} 只匹配 "aaa" , "aaaa" , "aaaaa" |
\( \) |
定义子表达式,将其视为单个元素,例如 \(ab\)* 可匹配 "" , "ab" , "abab" |
\n |
仅在 BRE 中有效,匹配第 n 个子表达式的内容,如 \(abc\)\1 匹配 "abcabc" |
示例
正则表达式 | 匹配内容 |
---|---|
.at |
匹配 "hat" , "cat" , "bat" |
[hc]at |
匹配 "hat" , "cat" |
[^b]at |
匹配 除 "bat" 之外的所有 .at 匹配项 |
^[hc]at |
匹配 "hat" , "cat" ,但仅在行首时匹配 |
[hc]at$ |
匹配 "hat" , "cat" ,但仅在行尾时匹配 |
\[.\] |
匹配 "[" 和 "]" 之间的任意单个字符,如 "[a]" , "[b]" |
字符类
POSIX 标准定义了一些字符类别,可在方括号 []
内使用。
POSIX 类 | 等效字符类 | 含义 |
---|---|---|
[:upper:] |
[A-Z] |
大写字母 |
[:lower:] |
[a-z] |
小写字母 |
[:alpha:] |
[A-Za-z] |
所有字母(大写 + 小写) |
[:digit:] |
[0-9] |
数字 |
[:xdigit:] |
[0-9A-Fa-f] |
十六进制数字 |
[:alnum:] |
[A-Za-z0-9] |
字母和数字 |
[:punct:] |
[!@#$%^&*()] |
标点符号(除了空格、字母、数字) |
[:blank:] |
[ \t] |
空格和 TAB |
[:space:] |
[ \t\n\r\f\v] |
所有空白字符(包括换行) |
[:cntrl:] |
[控制字符] |
控制字符(如 \n , \t 等) |
[:graph:] |
[^[:cntrl:]] |
所有可见字符(排除控制字符) |
[:print:] |
[[:graph:] ] |
所有可打印字符(包括空格) |
示例:
正则表达式 | 匹配内容 |
---|---|
a[[:digit:]]b |
匹配 "a0b" , "a1b" , ..., "a9b" |
[^ABZ[:lower:]] |
匹配 除 小写字母、A 、B 、Z 以外的字符 |
排序符号(Collating Symbols)
排序符号和字符类类似,用于特定语言环境(locale),格式为 [.ch.]
,其中 ch
是一个双字符组合(digraph)。
等价类(Equivalence Classes)
等价类 [=a=]
表示与 a
等价的所有字符,如:
- 如果
a
,à
,â
属于相同的等价类,那么:[[=a=]b]
等价于[aàâb]
[[=à=]b]
等价于[aàâb]
[[=â=]b]
等价于[aàâb]
等价类和排序符号依赖于语言环境(locale)。
相关工具
支持 POSIX BRE 语法的工具和语言:
- TextPad
- Zabbix
- grep
- sed
- awk
总结
- POSIX BRE 语法提供了比传统 Unix 正则表达式更丰富的功能,支持
grep
、sed
和awk
等工具的兼容性。 - 主要元字符包括
.
(任意字符)、[ ]
(字符类)、*
(重复)、^
(行首)、$
(行尾)等。 - 提供了字符类(如
[:digit:]
表示[0-9]
)和等价类(如[=a=]
匹配a
、à
、â
)等高级功能。 - 主要用于 Unix/Linux 相关工具,如
grep
、sed
、awk
,适用于文本处理和数据筛选。
POSIX 基本正则表达式(BRE)相较于现代 Perl 兼容正则表达式(PCRE)功能较少,但在 Unix 系统上仍然广泛使用,特别是在 shell 脚本和命令行工具中。
最后修改: 2025年01月30日 星期四 02:13