首页 > 解决方案 > 编写用于从字符串中提取信息的正则表达式

问题描述

我在下面提供了一个字符串:

AWSALB=eIFPQSLLQjg+; Expires=Fri, 20 Mar 2020 03:16:01 GMT; Path=/, AWSALBCORS=eIFPQSLLQjg+vW+; Expires=Fri, 20 Mar 2020 03:16:01 GMT; Path=/; SameSite=None; Secure, SilverWebAuth=48199A; expires=Fri, 13-Mar-2020 04:01:01 GMT; path=/; HttpOnly

我只想捕获下面提供的特定信息:

AWSALB=eIFPQSLLQjg+; AWSALBCORS=eIFPQSLLQjg+vW+; SilverWebAuth=48199A; 

我有 (\AWSALB=(.*?)\;) 的正则表达式,但这仅捕获第一项。我也想拥有其他两个术语。我如何为此目的编写正则表达式?

标签: javaregex

解决方案


它会是这样的:

String a = "AWSALB=eIFPQSLLQjg+; Expires=Fri, 20 Mar 2020 03:16:01 GMT; "
         + "Path=/, AWSALBCORS=eIFPQSLLQjg+vW+; Expires=Fri, 20 Mar 2020 "
         + "03:16:01 GMT; Path=/; SameSite=None; Secure, SilverWebAuth=48199A; "
         + "expires=Fri, 13-Mar-2020 04:01:01 GMT; path=/; HttpOnly";

String regex = "AWSALB=(.*?);|AWSALBCORS=(.*?);|SilverWebAuth=(.*?);";

Pattern p = Pattern.compile(regex);   // the pattern to search for
Matcher m = p.matcher(a);
StringBuilder sb = new StringBuilder("");
while(m.find()) {
    if (!sb.toString().equals("")) {
        sb.append(" ");
    }
    sb.append(m.group(0));
}

System.out.println(sb.toString());

输出到控制台:

AWSALB=eIFPQSLLQjg+; AWSALBCORS=eIFPQSLLQjg+vW+; SilverWebAuth=48199A;

推荐阅读