Напишите регулярное выражение для извлечения информации из строки - PullRequest
1 голос
/ 13 марта 2020

У меня есть строка, указанная ниже:

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

Я хочу получить только указанную ниже информацию c:

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

У меня есть регулярное выражение (\ AWSALB = (. *?) \;) но это только первый член. Я хотел бы также иметь другие 2 условия. Как мне написать регулярное выражение для этой цели?

Ответы [ 2 ]

1 голос
/ 13 марта 2020

Вы можете использовать чередование с необязательной частью для CORS и использовать отрицательный класс символов, соответствующий любому символу, отличному от ;, для значения.

Тогда вы можете получить полное совпадение, используя .group(0) или получите значение только с помощью .group(1)

(?:AWSALB(?:CORS)?|SilverWebAuth)=([^;]+);

Regex demo | Java демо

Например

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
1 голос
/ 13 марта 2020

Это будет go примерно так:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...