正则表达式(Regular Expressions)
Completion requirements
简单正则表达式(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\)*匹配exp0 次或多次 - 但在
SunOS 5.8的/usr/bin/grep中,它会匹配exp后面再跟一个*
- 在
在哪些工具中使用?
支持这种简单正则表达式语法的工具包括:
- Grep(
grep命令) - sed(
sed命令)
尽管这些工具仍然支持简单正则表达式,但如果你的环境支持扩展正则表达式(ERE),推荐使用 grep -E 或 sed -E 来获得更强大的匹配能力。
Last modified: Thursday, 30 January 2025, 2:05 AM