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,但我的语法突出显示仍然失败。我做错了什么吗?
我正在尝试使用 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,但我的语法突出显示仍然失败。我做错了什么吗?