在R中设置正则表达式选项

时间:2015-03-24 22:03:39

标签: regex r

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)以外的选项吗?

2 个答案:

答案 0 :(得分:2)

使用perl=TRUEgrep(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)