可以传递给R中的grep()的字符串长度是否有限制?

时间:2017-03-13 17:29:30

标签: r

我有一个包含2735个字符的字符串。我想在字符向量中搜索该字符串。当我运行grep()

grep(pattern=substr(string,1,2560), x=myvector)

我收到错误:

Error in grep(pattern = substr(string, 1, 2560), x = myvector) : 
  invalid regular expression 'all the characters of my string...'

如果我尝试

grep(pattern=substr(string,1,2559), x=myvector)

我没有收到错误。

问题:传递给grep()时字符串长度是否有限制?如果是这样,我应该如何解决它?

1 个答案:

答案 0 :(得分:6)

嗯,看起来你已经偶然发现了一个没有记录的特征"。解决方法是设置perl=TRUE,以使用PCRE库:

pat <- paste(rep("a", 2560), collapse="")
x <- paste0(ch, ch)

grep(pat, x)
#Error in grep(pat, ch) : 
#  invalid regular expression 'aaa....'

grep(pat, x, perl=TRUE)
#[1] 1

我猜这可以根据?grep中的评论来发挥作用:

  

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