[英]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.