OPA Rego策略中UUID路径正则匹配失效问题咨询
问题分析与解决
问题出在正则表达式中多余的\b(单词边界)元字符,以及Rego底层依赖的Go正则引擎的匹配特性:
多余的
\b导致匹配失败
你的正则在每个-前添加了\b,但UUID的格式是十六进制段直接连接-,这里的\b完全多余。部分在线正则工具对这类多余边界的匹配容错性较高,但Go的正则引擎对\b的匹配逻辑更严格,反而导致合法路径无法匹配。修正后的正则与Rego策略
去掉所有\b即可正常匹配,修正后的代码如下:is_accessing_user_resource if { re_match( "^/v1/users/[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", input.path, ) }Rego正则使用注意事项
- Rego基于Go的正则引擎,语法与Go完全一致,需注意字符串转义规则:在Rego字符串中表示
\必须写成\\(比如匹配.要写\\.),你代码中\\b的转义是正确的,只是\b本身属于冗余写法。 - 对于路径参数匹配,也可以考虑用Rego原生的字符串拼接校验(比如先提取路径段,再单独校验UUID格式),可读性会比正则更高。
- Rego基于Go的正则引擎,语法与Go完全一致,需注意字符串转义规则:在Rego字符串中表示
内容的提问来源于stack exchange,提问作者João Simões
相关产品推荐
相关产品推荐

