regex
,R 3.1.2版的文档说明了
Perl-like匹配可以在多种模式下工作,由选项设置(?i) (无壳,相当于Perl's / i),(?m)(多行,相当于 Perl's / m),(?s)(单行,所以一个点匹配所有字符,甚至 新行:相当于Perl's / s)和(?x)(扩展,空格 除非转义并允许注释,否则将忽略数据字符: 相当于Perl的/ x)。这些可以连接在一起,例如, (?im)设置无壳多线匹配。
但是,除了(?i)
之外,我无法使用这些选项而不会收到错误:
my.str <- "Abc
abc
ABC"
grep(pattern = "(?mi)abc", x = my.str)
为了在正则表达式中放置选项,我在开头和结尾尝试了相同的结果。知道如何制作(?i)
以外的选项吗?
答案 0 :(得分:2)
使用perl=TRUE
:grep(pattern = "(?mi)abc", x = my.str, perl = TRUE)
。看看http://astrostatistics.psu.edu/su07/R/html/base/html/grep.html。
使用的正则表达式是POSIX 1003.2指定的表达式, 扩展的或基本的,取决于扩展的值 参数,除非perl = TRUE,当它们是PCRE的时候, http://www.pcre.org/。 (支持的确切模式集可能取决于 如果是R,则在正在使用的系统上安装的PCRE版本上 配置为使用系统PCRE。 R的内部副本使用了PCRE 6.7。)
答案 1 :(得分:1)
对R使用正则表达式的最有效方法是传递perl=TRUE
参数。这告诉R使用PCRE库。正如R Documentation ...
grep,regexpr,gregexpr,sub,gsub和strsplit的perl = TRUE参数切换到 PCRE 库,该库使用与Perl 5.x相同的语法和语义实现正则表达式模式匹配,只有一些差异。
grep('(?mi)abc', my.str, perl = TRUE)