我能够对 中的正则表达式进行模式匹配vi
,但当我添加替换字符串时,vi
认为这是正则表达式匹配的一部分。尽管使用了各种不同的分隔符,但仍然会发生这种情况。有什么方法可以避免这种情况吗?例如,以下命令匹配并删除所需的字符串(\a{b}[c]
):
s:\\a{b}[c\]
但是,如果我添加替换字符串,
s:\\a{b}[c\]:abc
我收到错误
E486: Pattern not found: \\a{b}[c\]:abc
vi
因此无法识别将查询正则表达式与替换字符串分隔开的分隔符。这种情况发生在各种不同的分隔符/分隔符中。我如何确保vi
正确区分正则表达式模式和替换字符串?
答案1
左括号 ([) 开始一个集合,或一组将与其任意一个成员匹配的字符。集合以右括号 (]) 结束,但您在模式中已使用反斜杠转义右括号,因此将左括号右侧的vi
所有内容视为集合中。
如果要匹配文字左括号,则必须使用反斜杠将其转义。如果您想要创建一个包含c
和 的集合\
,则需要使用反斜杠转义\
。换句话说,您的替代命令可能应该看起来像这样
s:\\a{b}\[c\]:abc
或者像这样:
s:\\a{b}[c\\]:abc