繁体   English   中英

Java正则表达式在字符串中查找单词模式

[英]Java regex to find a word pattern in the String

我试图从字符串中查找特定单词,但找不到完全匹配的正则表达式。 字符串可以两种形式动态更改

https://www.test.com/vgi-bin/tmpscr?cmd=_temp-out&useraction=commit&token=EC-1J942953KU425764F

https://www.test.com/vgi-bin/tmpscr?cmd=_temp-out&useraction=commit&token=EC-1J942953KU425764F&paymentid=PAY-12345K4776H687987R

我需要找到模式以获取令牌值。 我已经尝试过使用此正则表达式(?<=token\\=).*我能够从第一个字符串中获取令牌,但不能从第二个字符串中获取令牌。 输出应如下所示。

EC-1J942953KU425764F

.*与任何字符零次或多次匹配,并且是贪婪的,并且在您的正则表达式中,该匹配将一直持续到字符串结尾。

您可以在后面使用正面的表情,然后使用否定的字符类[^&\\n]+一次或多次不匹配与号或换行符。 您不必逃避等号。

(?<=token=)[^&\\n]+

正则表达式演示

如果您定义捕获组,则不需要后面的内容,这会使IMO读取起来更容易一些。

另请注意,根据规范,分号字符曾经是允许的URL参数分隔符,因此,当您需要支持较旧或不一致的平台时,在匹配参数值时,您可能需要包括分号:

token=([^&;\n]+)

第二个匹配项应该是令牌本身。

相反,您可以使用spring-web UriComponentsBuilder

String url = "https://www.test.com/vgi-bin/tmpscr?cmd=_temp-out&useraction=commit&token=EC-1J942953KU425764F&paymentid=PAY-12345K4776H687987R";
MultiValueMap<String, String> queryParams =
        UriComponentsBuilder.fromUriString(url).build().getQueryParams();
queryParams.get("token")

或者您可以使用URIBuilder

List<NameValuePair> queryParams = new URIBuilder(url)
                .getQueryParams();

如果格式始终是这两种格式之一,并且您不想特别使用regex ,则可以满足以下条件:

int val = str.indexOf("paymentid");
System.out.println(str.substring(str.indexOf("token"), (val != -1) ? val - 1 : str.length()));

或者当然可以用str.indexOf("paymentid")替换val并一行完成。

如何使用正则表达式模式

[&?]token=([^&\r\n]*)

然后只提取捕获组1

String regex = "[&?]token=([^&\r\n]*)";
String input =
        "https://www.test.com/vgi-bin/tmpscr?cmd=_temp-out&useraction=commit&token=EC-1J942953KU425764F\n" +
        "https://www.test.com/vgi-bin/tmpscr?cmd=_temp-out&useraction=commit&token=EC-1J942953KU425764F&paymentid=PAY-12345K4776H6879";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
while(matcher.find())
{
    System.out.printf("Token is %s%n", matcher.group(1));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM