2012-03-15 53 views
1

有人告诉我,正则表达式服从这条规则:最早开始的比赛胜利。最早开始的比赛获胜?

> aab <- "aab" 
> gsub("a.*?b", "", aab, perl=T) 
[1] "" 
> gsub("a.*b", "", aab, perl=T) 
[1] "" 

现在,似乎该规则被遵守,但是......

> aab <- "\na\nab" 
> gsub("\n.*?b", "", aab, perl=T) 
[1] "\na" 
> gsub("\n.*b", "",aab, perl=T) 
[1] "\na" 

为什么现在它违背?

回答

5

这是因为.默认意思是“除换行符以外的任何字符”;所以全字符串\na\nab实际上不能与\n.*b匹配(因为中间的\n.不匹配)。唯一匹配的部分是子字符串\nab

要改变.表示“任何字符可言,甚至换行”,你可以插入魔法序列中的模式中更早(?s)

gsub("(?s)\n.*?b", "", aab, perl=T) 

以打开s选项(表示“单行“模式,尽管名称具有误导性:其唯一影响是以这种方式更改.的含义)。

+0

谢谢!相当有帮助! – syg 2012-03-15 03:20:06

+0

@syg:不客气! – ruakh 2012-03-15 03:24:47