You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.hgignore含负向预查的正则无法匹配/的问题排查

问题原因及解决办法

你遇到的问题核心在于 Mercurial 在处理 hgignore 正则匹配时,传递给正则引擎的路径字符串不会包含末尾的斜杠——哪怕是目录路径也一样。

具体分析

你的原正则:

(?<![^/])\.(?!(idea|yarn)/)

意图是排除.idea/和.yarn/目录,但对于.idea这个目录本身,Mercurial传递的匹配字符串是.idea(不带末尾/)。此时正则里的(?!(idea|yarn)/)负向预查会判定为真(因为字符串结尾没有/),导致.idea目录被匹配,进而被Mercurial递归忽略,所以它下面的文件自然不会出现在hg status结果里。

而换成\b后,正则变成(?<![^/])\.(?!(idea|yarn)\b),此时.idea字符串结尾的\b(单词边界)会触发负向预查,让.idea目录不被匹配,所以它的子文件能正常显示。

正确的正则写法

如果想用接近你原思路的写法,可以调整正则,同时匹配目录结尾(字符串结束)和路径延续(带/)的情况:

syntax: regexp
(?<![^/])\.(?!(idea|yarn)(/|$))

这个正则会排除以下两种情况:

  • 点开头后紧跟idea或yarn且是目录本身(字符串结尾)
  • 点开头后紧跟idea或yarn且后续还有路径(带/)

这样就能准确忽略所有点开头的文件/目录,同时保留.idea/和.yarn/及其子内容。

验证

用这个正则后,执行hg status -n --color=no,.idea下的文件会正常显示,而其他点开头的文件(比如.env、.gitignore)会被忽略,符合你的需求。

内容的提问来源于stack exchange,提问作者mpen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 12:47:53