考慮下面的命令奇數行爲:與貪婪修飾符內捕捉組
text <- "abcdEEEEfg"
sub("c.+?E", "###", text)
# [1] "ab###EEEfg" <<< OKAY
sub("c(.+?)E", "###", text)
# [1] "ab###EEfg" <<< WEIRD
sub("c(.+?)E", "###", text, perl=T)
# [1] "ab###EEEfg" <<< OKAY
第一不正是我所期望的,基本上是相匹配的第一E.第二個主要應等同於第一,因爲我所做的只是添加一個捕獲組(雖然我沒有使用它),但由於某種原因,它捕獲了一個額外的E。這說,它不是完全貪婪的(即如果它是它會捕獲所有ES)。即使是奇怪的,它實際上仍然匹配模式,即使sub
結果暗示.+?
塊遺漏了EE
,它不能再與正則表達式的其餘部分匹配。這表明在計算匹配子表達式的長度時存在偏移問題,而不是在實際匹配中。
最後一個是完全一樣的,但與PCRE一起運行,並按預期工作。
我錯過了什麼,或者這種行爲沒有文件/馬車?
這聽起來像一個錯誤在R – nneonneo
發佈爲** [一個bug](https://github.com/laurikari/tre/issues/21)**在tre github頁面。 – BrodieG