POSIX 基本正则表达式(BRE)

POSIX Basic Regular Expression(BRE) 语法提供了一些扩展,使 grepsedawk 等 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:]] 匹配小写字母ABZ 以外的字符

排序符号(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

总结

  1. POSIX BRE 语法提供了比传统 Unix 正则表达式更丰富的功能,支持 grepsedawk 等工具的兼容性。
  2. 主要元字符包括 .(任意字符)、[ ](字符类)、*(重复)、^(行首)、$(行尾)等
  3. 提供了字符类(如 [:digit:] 表示 [0-9])和等价类(如 [=a=] 匹配 aàâ)等高级功能
  4. 主要用于 Unix/Linux 相关工具,如 grepsedawk,适用于文本处理和数据筛选。

POSIX 基本正则表达式(BRE)相较于现代 Perl 兼容正则表达式(PCRE)功能较少,但在 Unix 系统上仍然广泛使用,特别是在 shell 脚本和命令行工具中。

最后修改: 2025年01月30日 星期四 02:13