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.