regex - 对 vim 正则表达式中的 `\?` 感到非常困惑
问题描述
我一直在尝试在 vim 中进行简单的替换,并发现在 vim 中的\?
vim 不能与*
or一起使用+
,也就是说(NFA regexp) Can't have a multi follow a multi
,在 vim 中:
i want it to stop here, not here
~
~
~
[NORMAL] ...
:%s/^\(.*\?\)here//
如果我删除\?
它可以工作,但它的正则表达式最多匹配 2nd here
。
但是使用普通的正则表达式它可以工作:https ://regex101.com/r/iHdxxl/1
为什么不能与 vim 一起使用\?
或*
在\+
vim 中使用?
解决方案
如那里所述,您不能?
在 asterix 之后在 vim 中添加字符。要使搜索不贪婪,您需要使用.\{-}
而不是.*
:
:%s/\(.\{-}\)here//
推荐阅读
- ruby-on-rails - Rails 查询未执行
- image-processing - LFW 数据集如何用于评估 facenet 模型
- qt - QString.toInt() 不起作用 - 错误:二进制表达式的操作数无效('const char *' 和 'const char [14]')
- python - 如何在给定的不规则日期重新采样时间序列
- typescript - 是否可以用玩笑递归地遍历对象?
- kubernetes - 使用 celery 工作者在 kubernetes 上部署后的气流 ui 日志错误
- laravel - 名称或服务未知 [tcp://redis:6379] 更改 REDIS_HOST 值仍然不起作用
- ios - 停止导航控制器?从滚动到底部时出现
- sockets - 套接字:连接/接受如何使用 3 次握手,如果他们曾经这样做过?
- java - 动态实时更新网页内容