使用Mercurial,我需要忽略所有文件,除了某个名为“keepers”的目录中的文件之外。

表面上看,使用Regex和Negative Lookahead似乎很容易。但是,尽管我可以在Regex Buddy和其他工具中验证我的正则表达式,但在TortoiseHg中,它却无法按预期工作。

文件:

  • junk\junk.txt
  • 垃圾\文字
  • keepers\test\test
  • keepers\test\test2\hi.txt
  • keepersblah.txt

  • 只有在keepers下的两个文件不应该被忽略。

    这是我希望可以使用的正则表达式:
    ^(?!keepers/).+$
    

    遗憾的是,这将导致所有文件被忽略。如果我将其更改为:
    ^(?!keepers).+$
    

    它会按您的预期工作。那就是它会忽略所有不是以keepers开头的文件/文件夹。但是我确实想忽略以管家开头的文件。

    奇怪的是,如果我将其更改为:
    ^(?!keepers/).+\..+$
    

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

    任何意见,将不胜感激。

    删除死的ImageShack链接

    最佳答案

    您的第一个表达式的问题在于,正则表达式还针对“keepers”本身进行了测试。可以在附加条件下添加该案例:

    ^(?!keepers(?:/|$))
    

    或(不太紧凑,但更易于理解):
    ^(?!keepers/|keepers$)
    

    关于regex - Mercurial .hgignore负前瞻,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2246964/

    10-13 07:44