Sub 反向引用()
'数字反向引用
' `\1`, `\g1`, `\g{1}` - 引用第1个捕获组
' `\2`, `\g2`, `\g{2}` - 引用第2个捕获组
' `\3`, `\g3`, `\g{3}` - 引用第3个捕获组
reg.Pattern = "(ab)(\1)(\g1)(\g{1})"
Set mc = reg.Execute("ababababc")
Debug.Print mc(0).Value
'先复习命名捕获组
' `(?<name>...)` - Perl命名捕获组
' `(?'name'...)` - Perl另一种命名捕获组
' `(?P<name>...)` - Python命名捕获组
'命名反向引用
' `\k<name>` - Perl风格的命名反向引用
' `\k'name'` - 单引号语法Perl
' `\k{name}` - .NET语法
' `\g{name}` - 通用命名引用语法Perl语法
' `(?P=name)` - Python风格语法
reg.Pattern = "(?<wd>\w+)\s+\w+\s+(\k<wd>)"
Set mc = reg.Execute("hello world hello")
Debug.Print mc(0).Value
'相对反向引用
' `\g{-1}`, `\g{-2}`... - 倒数第1,2个捕获组
' `\g{+1}`, `\g{+2}`... - 正数第1,2个捕获组(TODO:目前似乎不支持,RegBuddy里也不支持这种语法)
reg.Pattern = "(x)(y)\g{1}\g{-1}"
Set mc = reg.Execute("`xyxy")
Debug.Print mc(0).Value
End Sub-------------------------------------------------------------------------
Sub 回溯()
' \n reference by number (can be ambiguous)
' \gn reference by number
' \g{n} reference by number
' \g+n relative reference by number (PCRE2 extension)
' \g-n relative reference by number
' \g{+n} relative reference by number (PCRE2 extension)
' \g{-n} relative reference by number
' \k<name> reference by name (Perl)
' \k'name' reference by name (Perl)
' \g{name} reference by name (Perl)
' \k{name} reference by name (.NET)
' (?P=name) reference by name (Python)
End SubCopyright © 2025- vba.vip All Rights Reserved.