Oniguruma 正则表达式条件组捕获

Oniguruma regex conditional group capture

我正在尝试使用 Oniguruma 正则表达式(用于 VSCode 语法突出显示)将单词 function 捕获到 2 个不同的组中,具体取决于 :: 是否是前面的字符。据我所知,Oniguruma 不支持条件,因此我认为如果字符不存在,我可以将正则表达式结果捕获到第 1 组,如果字符存在,则捕获到第 2 组

目前,我有:

(?>::\s*\b(function)\b)|\b(function)\b

用于测试代码的一些文本:

  integer function fun_with_func_space(     function    )
    integer, intent(inout) :: function
  end function fun_with_func_space

预期的正则表达式匹配

鉴于上面的文字组 </code> 应该</p> <pre><code>finds 1st and 2nd "function" in 'integer function fun_with_func_space( function )' finds no match in 'integer, intent(inout) :: function' finds "function" in 'end function fun_with_func_space'

另一方面,$2组应该

finds no match in 'integer function fun_with_func_space(     function    )'
find "function" in 'integer function fun_with_func_space(     function    )'
finds no match in 'end function fun_with_func_space'

据我理解应该是: “捕获并退出组 2 中的词 function 如果前面有 :: 否则捕获组 1 中的 function。” 根据 regex101.com,它应该可以工作:https://regex101.com/r/VtgeTD/1,但我的语法突出显示仍然失败。我做错了什么吗?

尝试向后看:

(?<=::|:: )\b(function)\b|\b(function)\b

参见live demo

或者使用非捕获组:

(?:::\s*)(function)\b|\b(function)\b

live demo