正则表达式(Regular Expressions)
完成条件
简单正则表达式(Simple Regular Expressions)
简单正则表达式语法广泛用于Unix 系统,主要是为了向后兼容。大多数支持正则表达式的 Unix 工具(如 grep
和 sed
)默认使用此语法,同时也提供了扩展正则表达式(Extended Regular Expressions, ERE)的支持,通常可以通过命令行参数启用(如 grep -E
)。
然而,在符合 POSIX 标准的系统上,这种语法已被弃用(deprecated),不建议在新工具或程序中继续使用。
基本规则
在简单正则表达式中:
- 大多数字符(除了一些元字符)都被视为普通字符,它们只匹配自身。
- 例如:
"a"
仅匹配字符a
"(bc"
仅匹配"(bc"
操作符(Operators)
操作符 | 作用 |
---|---|
. |
匹配任意单个字符 |
[ ] |
字符集:匹配方括号内的任意一个字符,如 [abc] 可匹配 a 、b 或 c |
[^ ] |
取反字符集:匹配不在方括号内的任意一个字符,如 [^xyz] 匹配 除 x 、y 、z 之外的所有字符 |
^ |
行首锚点:匹配行首(在多行模式下,匹配每行的开始) |
$ |
行尾锚点:匹配行尾(在多行模式下,匹配每行的结尾) |
|
分组:用于定义子表达式(subexpression),匹配的文本部分可以稍后再次引用 |
\n |
后向引用(n 为 1-9 之间的数字):匹配第 n 个子表达式匹配到的文本(此用法未被扩展正则表达式采用) |
* |
零次或多次匹配:匹配前面的表达式 0 次或多次 |
\n* |
重复匹配(n 为 1-9 之间的数字):匹配第 n 个子表达式匹配到的内容 0 次或多次 |
示例(Examples)
基本匹配
正则表达式 | 匹配 |
---|---|
^[hc]at |
仅匹配 hat 和 cat ,但必须出现在行首 |
[hc]at$ |
仅匹配 hat 和 cat ,但必须出现在行尾 |
带后向引用的匹配
正则表达式 | 匹配 |
---|---|
(a.)c\1* |
abcab 和 abcabab ,但不匹配 abcac |
特殊情况
- 如果
\( \)
与*
组合使用,有的工具会报错- 在
SunOS 5.8
的/usr/bin/xpg4/grep
中,\(exp\)*
匹配exp
0 次或多次 - 但在
SunOS 5.8
的/usr/bin/grep
中,它会匹配exp
后面再跟一个*
- 在
在哪些工具中使用?
支持这种简单正则表达式语法的工具包括:
- Grep(
grep
命令) - sed(
sed
命令)
尽管这些工具仍然支持简单正则表达式,但如果你的环境支持扩展正则表达式(ERE),推荐使用 grep -E
或 sed -E
来获得更强大的匹配能力。
最后修改: 2025年01月30日 星期四 02:05