【发布时间】:2016-07-31 07:01:29
【问题描述】:
我对反向引用的使用感到非常困惑
strings <- c("^ab", "ab", "abc", "abd", "abe", "ab 12")
gsub("(ab) 12", "\\1 34", strings)
[1] "^ab" "ab" "abc" "abd" "abe" "ab 34"
gsub("(ab)12", "\\2 34", strings)
[1] "^ab" "ab" "abc" "abd" "abe" "ab 12"
我知道 \1 指的是第一个子模式(从左边开始),\2 指的是第二个子模式,依此类推。但我不知道这个子模式是什么意思。为什么 \1 和 \2 给出不同的输出
gsub("(ab)", "\\1 34", strings)
[1] "^ab 34" "ab 34" "ab 34c" "ab 34d" "ab 34e" "ab 34 12"
另外,为什么我在 (ab) 之后删除 12 会得到这样的结果?
gsub("ab", "\\1 34", strings)
[1] "^ 34" " 34" " 34c" " 34d" " 34e" " 34 12"
此外,如果 ab 没有括号怎么办?说明什么?
我真的搞砸了反向引用,希望有人能清楚地解释逻辑
【问题讨论】:
-
它不是一个“子模式”,而是一个捕获组。如果你谷歌它,你会发现很多资源。括号
()内的任何模式都是一个捕获组。无论如何,我在您的第一个示例中没有得到相同的结果。最后一个元素是ab 34而不是ab 12。 -
是的,你是对的,我粘贴了错误的输出。
标签: r regex gsub backreference