【问题标题】:Mercurial .hgignore Negative LookaheadMercurial .hgignore 负前瞻
【发布时间】:2011-01-15 20:38:44
【问题描述】:

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

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

文件:

  • 垃圾\junk.txt
  • 垃圾\文本
  • 守门员\测试\测试
  • keepers\test\test2\hi.txt
  • keepersblah.txt

只有keepers下的两个文件不能忽略。

这是我希望能起作用的正则表达式:

^(?!keepers/).+$

很遗憾,这会导致所有文件都被忽略。如果我将其更改为:

^(?!keepers).+$

它可以按您的预期工作。也就是说,它会忽略任何不以 Keepers 开头的文件/文件夹。但我确实想忽略以 Keepers 开头的文件。

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

^(?!keepers/).+\..+$

它会正确匹配文件夹,但不会忽略不在 Keepers 文件夹中的文件(如果它们没有扩展名)。

任何建议将不胜感激。

删除无效的 ImageShack 链接

【问题讨论】:

    标签: regex mercurial tortoisehg hgignore


    【解决方案1】:

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

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

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

    ^(?!keepers/|keepers$)
    

    【讨论】:

    • 我也试过^(?!keepers\b),但对“keepers.txt”失败了
    • 太棒了!非常感谢,两者都工作得很好。我已经敲了一个小时的头:)
    • 在前瞻断言中不需要非捕获组,因为它无论如何都没有被捕获:^(?!keepers(/|$)).*
    猜你喜欢
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    • 2020-07-03
    • 1970-01-01
    • 2021-10-11
    相关资源
    最近更新 更多