正则表达式(Regular Expressions)
Completion requirements
基本正则表达式(Basic Regular Expressions, BRE)
在不同的正则表达式实现中,对反斜杠(\)的解释有所不同。例如:
egrep和perl将 不加反斜杠的()和|视为元字符,而加上反斜杠(\(和\|)表示匹配普通字符。- 旧版本的
grep不支持|(管道替换操作符),因此必须使用\|进行替代。
操作符(Operators)
| 操作符 | 作用 |
|---|---|
. |
点(.)匹配任意单个字符 |
[ ] |
方括号匹配字符列表或字符范围 |
[^ ] |
取反方括号:匹配不在指定字符列表或范围内的单个字符 |
* |
星号(*)匹配前面的字符 零次或多次 |
^ |
插入符(^)匹配行首 |
$ |
美元符号($)匹配行尾 |
示例(Examples)
| 正则表达式 | 匹配 |
|---|---|
".at" |
任意三个字符的单词,如 hat、cat 或 bat |
"[hc]at" |
仅匹配 hat 和 cat |
"[^b]at" |
匹配所有符合 ".at" 的单词,但排除 bat |
"^[hc]at" |
匹配 hat 和 cat,但必须在行首 |
"[hc]at$" |
匹配 hat 和 cat,但必须在行尾 |
注意事项
字符范围的匹配取决于所使用的区域设置(locale):
- 在某些设置下,字母按
abc..yzABC..YZ顺序排列。 - 在其他设置下,字母可能按照
aAbBcC..yYzZ排列,这会影响字符范围的匹配规则。
POSIX 基本正则表达式(BRE)
POSIX 为 grep、sed 和 awk 等 Unix 工具提供了额外的扩展,以增强一致性。然而:
- 这些扩展并未被所有传统的 Unix 工具支持。
- 在某些旧版本的
grep、sed和awk中,可能需要使用\(和\)
(),或 使用 \| 代替 |。
在哪些工具中使用?
使用**基本正则表达式(BRE)**的工具和编程语言包括:
grep(默认使用 BRE,可用grep -E启用扩展正则)sedawk- 部分 POSIX 兼容工具
尽管基本正则表达式仍然被支持,但推荐使用扩展正则表达式(ERE),以获得更简洁和强大的匹配功能(如 grep -E 或 sed -E)。
Last modified: Thursday, 30 January 2025, 2:08 AM