Mercurial .hgignore否定前瞻

Mic*_*oie 10 regex mercurial tortoisehg hgignore

使用Mercurial,我需要忽略所有文件,除了名为"keepers"的某个目录中的文件.

从表面上看,使用Regex和Negative Lookahead似乎很容易; 但是,虽然我能够在Regex Buddy和其他工具中验证我的正则表达式,但在TortoiseHg中,它并没有按预期工作.

文件:

  • 垃圾\ junk.txt
  • 垃圾\文
  • 饲养员\测试\测试
  • 饲养员\测试\ TEST2\hi.txt
  • keepersblah.txt

只有守护者下的两个文件不应该被忽略.

这是我希望的正则表达式:

^(?!keepers/).+$
Run Code Online (Sandbox Code Playgroud)

遗憾的是,这会导致忽略所有文件.如果我将其更改为:

^(?!keepers).+$
Run Code Online (Sandbox Code Playgroud)

它可以像你期望的那样工作.也就是说,它会忽略任何不以keepers开头的文件/文件夹.但我确实想忽略以keepers开头的文件.

奇怪的是,如果我改成它:

^(?!keepers/).+\..+$
Run Code Online (Sandbox Code Playgroud)

它将正确匹配文件夹,但如果没有扩展名,则不会忽略不在keepers文件夹中的文件.

任何意见,将不胜感激.

删除死的ImageShack链接

esw*_*ald 7

你的第一个表达式的问题是正则表达式也针对"keepers"本身进行了测试.这种情况可以添加一个附加条件:

^(?!keepers(?:/|$))
Run Code Online (Sandbox Code Playgroud)

或(不太紧凑,但更容易理解):

^(?!keepers/|keepers$)
Run Code Online (Sandbox Code Playgroud)

  • 在前瞻性断言中,不需要非捕获组,因为它不会被捕获:`^(?!keepers(/ | $)).*` (2认同)