You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Java正则匹配AWS Execute-API ARN返回NOT MATCHES?

问题原因及解决方案:通配符与正则表达式的混淆

你遇到的核心问题是把shell风格的通配符直接当成正则表达式使用了。Java的Pattern类解析的是标准正则表达式,而非通配符语法:

  • 通配符里的*代表匹配任意长度的任意字符;
  • 但正则表达式里的*是量词,表示“匹配前面的字符零次或多次”,单独的*在这里会匹配零个或多个前面的://分隔符,完全不符合你的匹配预期。

修复方案

把通配符中的*替换为正则表达式里表示“任意字符序列”的.*,修改后的代码如下:

public static void main(String args[]) {
    String methodArn = "arn:aws:execute-api:eu-west-1:123456:foo/test/GET/user/info";
    String permission = "arn:aws:execute-api:*:*:*/*/*/*";
    // 将通配符*转换为正则的任意字符匹配逻辑
    String regex = permission.replace("*", ".*");

    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(methodArn);
    if (matcher.matches()) {
        System.out.println("MATCHES");
    } else {
        System.out.println("NOT MATCHES");
    }
}

执行这段代码会输出MATCHES,符合你的预期。

进阶:更精确的匹配

如果希望每个*仅匹配ARN各分段的内容(不跨:或/分隔符),可以把*替换为[^/:]*,这样每个通配符只会匹配分隔符之间的字符序列,避免意外的跨段匹配:

String regex = permission.replace("*", "[^/:]*");

内容的提问来源于stack exchange,提问作者asdasf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 13:42:35