最早开始的比赛获胜?

时间:2012-03-15 02:58:38

标签: regex r

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

> 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"

为什么现在不服从?

1 个答案:

答案 0 :(得分:5)

这是因为默认情况下.表示“除换行符以外的任何字符”;所以完整字符串\na\nab实际上无法与\n.*b匹配(因为中间的\n.不匹配)。匹配它的唯一部分是子串\nab

要将.更改为“任何字符,甚至是换行符”,您可以在模式的前面插入魔术序列(?s)

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

打开s选项(表示“单行”模式,虽然该名称具有误导性:它的唯一作用是以这种方式更改.的含义。)