R:获取正则表达式匹配中第一个反向引用的位置
R: Get position of first backreference in regex match
我正在使用 R。我有一个带有捕获组的正则表达式。我想在第一个匹配的子字符串中找到第一个反向引用 (\1
) 的位置和长度。
例如,假设正则表达式为 b(a+)b
,字符串为 bbaaab
;第一个匹配的子串baaab
从位置2开始,第一个反向引用的起始位置是3,第一个反向引用的长度是3。
我将通过问题中的示例展示如何做到这一点。
如果你这样做 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 个反向引用/捕获组的位置和长度。
我正在使用 R。我有一个带有捕获组的正则表达式。我想在第一个匹配的子字符串中找到第一个反向引用 (\1
) 的位置和长度。
例如,假设正则表达式为 b(a+)b
,字符串为 bbaaab
;第一个匹配的子串baaab
从位置2开始,第一个反向引用的起始位置是3,第一个反向引用的长度是3。
我将通过问题中的示例展示如何做到这一点。
如果你这样做 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 个反向引用/捕获组的位置和长度。