我有一个2735个字符的字符串.我想在字符向量中搜索该字符串.当我运行grep()时
grep(pattern=substr(string,1,2560), x=myvector)
Run Code Online (Sandbox Code Playgroud)
我收到错误:
Error in grep(pattern = substr(string, 1, 2560), x = myvector) :
invalid regular expression 'all the characters of my string...'
Run Code Online (Sandbox Code Playgroud)
如果我试试
grep(pattern=substr(string,1,2559), x=myvector)
我没有得到错误.
问题:传递给grep()时字符串长度是否有限制?如果是这样,我应该如何解决它?
嗯,看起来你偶然发现了一个无证的"功能".解决方法是设置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
Run Code Online (Sandbox Code Playgroud)
我猜这可以根据以下评论起作用?grep:
如果您正在进行大量正则表达式匹配(包括非常长的字符串),则需要考虑使用的选项.通常PCRE将比默认正则表达式引擎更快,并且仍然更快固定= TRUE(特别是当每个模式仅匹配几次时).