为什么'*'在我的.Rbuildignore文件中不能作为perl regexp工作?

时间:2010-11-30 20:46:11

标签: perl r

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

*pdf                                                                            
*Rdata  

我收到了错误:

  

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

  

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

我认为'*'是一个或多个角色的通配符?

4 个答案:

答案 0 :(得分:9)

有关正则表达式的帮助,请参阅help(regex),尤其是Perl变种,并尝试

 .*pdf
 .*Rdata

代替。 'dot'匹配任何图表,'star'表示它可以重复零次或多次。我只是尝试了我的一个包,这确实忽略了我们要求的pdf插图。

答案 1 :(得分:9)

文件有两种模式匹配方式:

  1. 正则表达式。这些用于一般字符串模式匹配。见?regex
  2. 水珠。这些通常由UNIX shell使用。见?Sys.glob
  3. 你似乎在考虑使用globs,但是.Rbuildignore使用正则表达式。要将glob转换为正则表达式,请尝试

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

答案 2 :(得分:7)

在perl regexp中,使用.*?作为通配符。

但我认为你真正想要的是pdf$Rdata$,因为.Rbuildignore中的条目似乎也影响了它们只匹配部分路径的文件。 $表示“路径的终点”。

答案 3 :(得分:5)

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

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