Java 编写正则表达式以从字符串中提取信息

Java 编写正则表达式以从字符串中提取信息,java,regex,Java,Regex,我在下面提供了一个字符串: 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=/; H

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

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=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=(.*?\;)的正则表达式,但这只捕获第一个术语。我还想要另外两个条件。如何为此编写正则表达式

会是这样的:

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;

您可以为
CORS
使用可选部分的替换,并使用与
以外的任何字符匹配的否定字符类以获取该值

然后,您可以使用
.group(0)
获得整个匹配,或者仅使用
.group(1)

|

比如说

String regex = "(?:AWSALB(?:CORS)?|SilverWebAuth)=([^;]+);";
String string = "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\n";

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(string);

while (matcher.find()) {
    System.out.println(matcher.group(0));
    System.out.println(matcher.group(1));
    System.out.println("");
}
输出

AWSALB=eIFPQSLLQjg+;
eIFPQSLLQjg+

AWSALBCORS=eIFPQSLLQjg+vW+;
eIFPQSLLQjg+vW+

SilverWebAuth=48199A;
48199A

你试过什么?请发布您的代码,并指出您遇到的问题。请看,我的正则表达式是
(\AWSALB=(.*?)
,但这只捕获了第一个术语。我还想要另外两个术语。你可能想先试试这个:你说的第一个术语到底是什么意思?您使用的是“非贪婪运算符”
。这将把
*
范围缩小到符合条件的第一个最短文本长度。默认情况下,正则表达式只匹配一个匹配项。regex
g
选项通常告诉它捕获行中所有出现的regex匹配。不确定重复出现的结果将如何返回,可能是作为数组中的多个元素返回。我想捕获后面提供的字符串。ie
AWSALB=eIFPQSLLQjg+;AWSALBCORS=eIFPQSLLQjg+vW+;SilverWebAuth=48199A我接受了前面的答案,但这也很有帮助。