求匹配HackLang中所有|>管道操作符表达式的正则表达式
匹配HackLang管道表达式组的正则方案
可以使用支持递归平衡括号的正则实现需求,以下是可行的表达式:
\b(?:[^()\s]+|\((?:[^()]+|\((?R)\))*\))+(?:\s*\|\>\s*(?:[^()\s]+|\((?:[^()]+|\((?R)\))*\))+)+
正则说明:
\b:确保匹配从合法的表达式起始位置开始,避免截断部分标识符- 核心表达式单元
(?:[^()\s]+|\((?:[^()]+|\((?R)\))*\))+:[^()\s]+:匹配非括号、非空白的字符(如变量名、函数名、$$这类特殊标记)\((?:[^()]+|\((?R)\))*\):递归匹配平衡的括号结构,支持嵌套函数调用(如foo(bar(baz())))
(?:\s*\|\>\s*(?:...)\+)+:重复匹配|>管道操作符及其后续的表达式,\s*兼容操作符前后的任意空白
使用效果:
针对示例输入:
"x() |> y($$) |> z($$) any random string a() |> b($$) |> c($$)"
会匹配到两个结果:
x() |> y($$) |> z($$)a() |> b($$) |> c($$)
注意事项:
- 该正则依赖PCRE递归特性,需要在支持PCRE的环境中使用(如PHP、Python的
regex库,而非标准re库) - 若表达式包含除括号外的其他嵌套语法(如数组
[]、对象{}),可扩展正则的字符集和平衡规则
内容的提问来源于stack exchange,提问作者Abhishek
相关产品推荐
相关产品推荐

