简单正则表达式(Simple Regular Expressions)

简单正则表达式语法广泛用于Unix 系统,主要是为了向后兼容。大多数支持正则表达式的 Unix 工具(如 grepsed)默认使用此语法,同时也提供了扩展正则表达式(Extended Regular Expressions, ERE)的支持,通常可以通过命令行参数启用(如 grep -E)。

然而,在符合 POSIX 标准的系统上,这种语法已被弃用(deprecated),不建议在新工具或程序中继续使用。


基本规则

简单正则表达式中:

  • 大多数字符(除了一些元字符)都被视为普通字符,它们只匹配自身。
  • 例如:
    • "a" 仅匹配字符 a
    • "(bc" 仅匹配 "(bc"

操作符(Operators)

操作符 作用
. 匹配任意单个字符
[ ] 字符集:匹配方括号内的任意一个字符,如 [abc] 可匹配 abc
[^ ] 取反字符集:匹配不在方括号内的任意一个字符,如 [^xyz] 匹配 xyz 之外的所有字符
^ 行首锚点:匹配行首(在多行模式下,匹配每行的开始)
$ 行尾锚点:匹配行尾(在多行模式下,匹配每行的结尾)
彩蛋 分组:用于定义子表达式(subexpression),匹配的文本部分可以稍后再次引用
\n 后向引用n1-9 之间的数字):匹配n 个子表达式匹配到的文本(此用法未被扩展正则表达式采用
* 零次或多次匹配:匹配前面的表达式 0 次或多次
\n* 重复匹配n1-9 之间的数字):匹配n 个子表达式匹配到的内容 0 次或多次

示例(Examples)

基本匹配

正则表达式 匹配
^[hc]at 仅匹配 hatcat,但必须出现在行首
[hc]at$ 仅匹配 hatcat,但必须出现在行尾

带后向引用的匹配

正则表达式 匹配
(a.)c\1* abcababcabab,但不匹配 abcac

特殊情况

  • 如果 \( \)* 组合使用,有的工具会报错
    • SunOS 5.8/usr/bin/xpg4/grep 中,\(exp\)* 匹配 exp 0 次或多次
    • 但在 SunOS 5.8/usr/bin/grep 中,它会匹配 exp 后面再跟一个 *

在哪些工具中使用?

支持这种简单正则表达式语法的工具包括:

  • Grepgrep 命令)
  • sedsed 命令)

尽管这些工具仍然支持简单正则表达式,但如果你的环境支持扩展正则表达式(ERE),推荐使用 grep -Esed -E 来获得更强大的匹配能力。

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