2015-05-19 170 views
1

我有一個請求查詢字符串,其中包含參數名稱&&name),因爲在請求查詢字符串中,參數也用&分隔,則變量名稱爲&&name。我寫的正則表達式這是應返回的參數值正則表達式與Java中的非空白字符匹配

Matcher matcher = Pattern.compile("&(&[^=]+)=([^&]*)").matcher(str); 
while (matcher.find()) { 
String value = matcher.group(2); 
    System.out.println(value); 
} 

所以正則表達式工作正常時請求字符串具有以下結構:

String str = "&&NAME=name 1&&NAME=name 2&type=1"; 

輸出是:

name 1 
name 2 


但是當字符串有以下結構

String str = "&&NAME=name 1&&NAME=name & 2&type=1"; 

輸出是:

name 1 
name 


我嘗試這樣做:

&(&[^=]+)=([^\\S&\\S]*) 

\\S非空白匹配,但也沒有工作。我該如何解決它?

+0

我有一個公正的查詢字符串。我試過你的正則表達式,但它不工作,因爲我想要的。我用你的替換第二組:&(&[^ =] +)=(。*?)(?= && | $),但輸出爲名稱1和名稱&2&type = 1 – Lusi

+0

我添加了一個答案, 。 –

回答

1

我想,如果有一個非空白字符,你可以使用這個表達式,將確保我們停止食用字符轉換成2組之後&

String rx = "&(&.*?)=(.*?)(?=&\\S|$)"; 

IDEONE Demo

輸出:

name 1 
name & 2 
+0

這項工作非常感謝你 – Lusi

0

你可以使用這個環視基於正則表達式:

(?<=&&|^).*?(?=&&|$) 

RegEx Demo