簡體   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