我正在使用R.我有一个带有捕获组的正则表达式。我想在第一个匹配的子字符串中找到第一个反向引用(\\1
)的位置和长度。
例如,假设正则表达式为b(a+)b
且字符串为bbaaab
;从位置2开始,第一个匹配的子串是baaab
,第一个反向引用的起始位置是3,第一个反向引用的长度是3。
答案 0 :(得分:1)
我将通过构建问题中的示例来说明如何做到这一点。
如果你做regexpr("b(a+)b", "bbaaab", perl = TRUE)
,你会得到
[1] 2
attr(,"match.length")
[1] 5
attr(,"useBytes")
[1] TRUE
attr(,"capture.start")
[1,] 3
attr(,"capture.length")
[1,] 3
attr(,"capture.names")
[1] ""
因此,如果您想要获得第一个反向引用的开头,则执行attr(regexpr("b(a+)b", "bbaaab", perl = TRUE), 'capture.start')[1]
,如果您想获得其长度,则执行attr(regexpr("b(a+)b", "bbaaab", perl = TRUE), 'capture.length')[1]
。您可以轻松地对此进行概括,以获得第n个反向引用/捕获组的位置和长度。