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