何时在'strsplit'中设置'perl = TRUE'不起作用(按预期或根本不起作用)?

时间:2013-07-20 00:49:12

标签: regex r pcre

我在尝试优化某些代码时做了一些基准测试,发现strsplit perl=TRUE 比使用strsplit运行perl=FALSE 。例如,

set.seed(1)
ff <- function() paste(sample(10), collapse= " ")
xx <- replicate(1e5, ff())

system.time(t1 <- strsplit(xx, "[ ]"))
#  user  system elapsed 
# 1.246   0.002   1.268 

system.time(t2 <- strsplit(xx, "[ ]", perl=TRUE))
#  user  system elapsed 
# 0.389   0.001   0.392 

identical(t1, t2) 
# [1] TRUE

所以我的问题(或者更确切地说是标题中的问题的变体)是,在什么情况下绝对需要perl=FALSE(省略fixeduseBytes参数)?换句话说,使用perl=TRUE我们无法做什么可以通过设置perl=FALSE来完成?

1 个答案:

答案 0 :(得分:2)

来自文档;)

  

性能考虑因素

     

如果要进行大量正则表达式匹配(包括非常长的字符串),则需要考虑使用的选项。通常PCRE将比默认的正则表达式引擎更快,并且仍然更快固定= TRUE(特别是当每个模式只匹配几次时)。

当然,这并没有回答“总是使用perl=TRUE是否有任何危险”的问题