【问题标题】:Why doesn't '*' work as a perl regexp in my .Rbuildignore file?为什么 '*' 在我的 .Rbuildignore 文件中不能作为 perl 正则表达式工作?
【发布时间】:2010-11-30 20:46:10
【问题描述】:

当我尝试在我的 .Rbuildignore 文件中构建包含以下内容的包时,

*pdf                                                                            
*Rdata  

我得到错误:

readLines(ignore_file) 中的警告: 在“/home/user/project/.Rbuildignore”上找到不完整的最后一行

无效的正则表达式'*pdf'

我认为“*”是一个或多个字符的通配符?

【问题讨论】:

    标签: perl r


    【解决方案1】:

    文件的模式匹配有两种风格:

    1. 正则表达式。这些用于一般字符串模式匹配。见 ?regex
    2. 球体。这些通常由 UNIX shell 使用。参见 ?Sys.glob

    您似乎在考虑 glob,但 .Rbuildignore 使用正则表达式。要将 glob 转换为正则表达式,请尝试

    > glob2rx("*pdf")
    [1] "^.*pdf$"
    

    【讨论】:

      【解决方案2】:

      请参阅help(regex) 以获取有关正则表达式的帮助,尤其是。 Perl 变体,然后尝试

       .*pdf
       .*Rdata
      

      相反。 “点”匹配任何字符,“星”表示它可以重复零次或多次。我刚刚在我的一个包裹上试了一下,这确实成功地忽略了我们要求的 pdf 小插图。

      【讨论】:

        【解决方案3】:

        在 perl 正则表达式中,使用 .*? 作为通配符。

        但我认为您真正想要的是 pdf$Rdata$ 作为 .Rbuildignore 中的条目似乎也会影响其路径仅部分匹配的文件。 $ 表示“路径的尽头”。

        【讨论】:

        • 你的意思是我应该使用 .*pdf$ 和 .*Rdata$ 吗?
        • @David:不。 pdf$Rdata$
        【解决方案4】:

        * 是一个附加到前一个表达式的量词,以允许它在 0 和无限之间重复。由于您没有在量词之前加上表达式,因此这是一个错误。

        . 是匹配任何字符的表达式。所以我怀疑你想要.*pdf.*Rdata等。

        【讨论】:

          猜你喜欢
          • 2016-11-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-06-26
          • 1970-01-01
          • 1970-01-01
          • 2019-02-07
          相关资源
          最近更新 更多