【问题标题】:Regex for all files except .hg_keep除 .hg_keep 之外的所有文件的正则表达式
【发布时间】:2010-11-26 12:13:03
【问题描述】:

我使用空的 .hg_keep 文件在 Mercurial 中保留一些(否则为空的)文件夹。

问题是我找不到一个有效的正则表达式,它排除了除.hg_keep 文件之外的所有内容。

假设我们有这个文件结构:

a/b/c2/.hg_keep
a/b/c/d/.hg_keep
a/b/c/d/file1
a/b/c/d2/.hg_keep
a/b/.hg_keep
a/b/file2
a/b/file1
a/.hg_keep
a/file2
a/file1

我只想保留a/b/ 下的.hg_keep 文件。

http://gskinner.com/RegExr/ 的帮助下,我创建了以下.hgignore

syntax: regexp
.*b.*/(?!.*\.hg_keep)

但 Mercurial 会忽略 b 的子文件夹中的所有 .hg_keep 文件。

# hg status
? .hgignore
? a/.hg_keep
? a/b/.hg_keep
? a/file1
? a/file

# hg status -i
I a/b/c/d/.hg_keep
I a/b/c/d/file1
I a/b/c/d2/.hg_keep
I a/b/c2/.hg_keep
I a/b/file1
I a/b/file2

我知道我可以hd add 所有.hg_keep 文件,但是有正则表达式(或glob)的解决方案吗?

【问题讨论】:

    标签: regex mercurial hgignore


    【解决方案1】:

    正则表达式否定可能适用于此。如果你想忽略所有除了a/b/.hg_keep文件,你可以使用:

    ^(?!a/b/\.hg_keep)$
    

    这个正则表达式的重要部分是:

    ^                   anchor the match to the beginning of the file path
    (?!  ... )          negation of the expression between '!' and ')'
    a/b/\.hg_keep       the full path of the file you want to match
    $                   anchor the match to the end of the file path
    

    正则表达式

    ^a/b/\.hg_keep$
    

    只匹配名为a/b/.hg_keep的文件。

    它的否定

    ^(?!a/b/\.hg_keep)$
    

    将匹配其他所有内容。

    【讨论】:

      【解决方案2】:

      不太确定您在什么上下文中使用正则表达式,但这应该是它,它匹配所有以.hg_keep 结尾的行:

      ^.*\.hg_keep$
      

      编辑:这是一个正则表达式,用于匹配与上述表达式不匹配的项目:

      ^(?:(?!.*\.hg_keep).)*$
      

      【讨论】:

      • 这些是他唯一需要不匹配的行——这是针对 .hgignore 文件的。
      • gskinner.com/RegExr 中有效,但在.hgignore 中无效。可能是 mercurial 中的正则表达式解析有问题?它还匹配我要保留的文件“a/file1”和“a/file2”。
      • @rmweiss 抱歉不熟悉 mercurial 的怪癖
      【解决方案3】:

      试试(?!.*/\.hg_keep$)

      【讨论】:

      • 不起作用。在 .hgignore 中,它会忽略所有文件。请记住我要保留“a/file1”和“a/file2”。
      【解决方案4】:

      寻找与此类似的东西。 找到了答案,但这不是我们想听到的。

      1. 限制

      除了一组文件之外,没有直接的方法可以忽略所有文件。与其他模式结合使用时,尝试使用反向正则表达式匹配将失败。这是一个有意的限制,因为其他格式都被认为太容易让用户感到困惑,不值得额外的灵活性。

      参考:https://www.mercurial-scm.org/wiki/.hgignore

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-10-23
        • 2021-09-07
        • 2017-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-16
        相关资源
        最近更新 更多