0

我正在尝试使用正则表达式来匹配来自 X.509 证书的 CN。

整个字符串看起来像这样:

CN=杰森,OU=MYOU,O=MYORG

这是无效的代码:

    Object certChain = request
            .getAttribute("javax.servlet.request.X509Certificate");
    String name = "";
    if (certChain != null) {
        X509Certificate certs[] = (X509Certificate[]) certChain;
        X509Certificate cert = certs[0];
        name = cert.getSubjectDN().getName();
    }

    String strPattern = "CN=(.*?),";
    Pattern pattern = Pattern.compile(strPattern);
    Matcher matcher = pattern.matcher(name);
    String cname = "";
    if (matcher.matches()) {
        cname = matcher.group(1);
    }

Matcher.matches() 返回 false,但我看不出该模式有问题。任何人都可以帮忙吗?

杰森

4

2 回答 2

4

Matcher.matches如果模式匹配所有输入,则唯一返回 true 。你有两条前进的道路:

  • 扩展模式以匹配所有输入:"CN=(.*?),.*"
  • 用于Matcher.find查找输入中模式的第一次出现。对 find 的后续调用将匹配输入中的连续出现。
于 2012-09-05T19:56:45.370 回答
1

要完全匹配字符串Matcher.matches(),您可以使用:

String strPattern = "CN=(.*?),.*";
于 2012-09-05T19:43:59.210 回答