2012-03-15 49 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