2016-03-03 35 views
-1

某些服務返回我無效的xml。 例如:使用正則表達式匹配xml標籤名稱

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <123>PHONE</123> 
</root> 

對於我用java SAX解析器和獲取異常試圖解析這個XML解析。

所以我想創建一個正則表達式來代替< 123>到< _123>。 我嘗試了不同的表達,但沒有成功。

我想是這樣的:

searchResponse = searchResponse.replaceAll("([^</>]*)\\d([^>]*)", "_$0"); 

,但它沒有工作

+0

下劃線不會出現在關閉標籤。 我得到<_1884526>工作 alexdzot

+0

我強烈建議你不要使用正則表達式。看看你是否可以從服務端解決問題。 – user2004685

+0

我無法解決這個問題,因爲它是一些CRM系統的API – alexdzot

回答

0

這看起來有所幫助:

https://github.com/branaway/Japid/blob/master/src.japidplay/cn/bran/play/routing/ParamSpec.java#L21

String format = "[^/]+"; // the default regex 
Class<?> type; 
static final String varNamePatternText = "[a-zA-Z_$][a-zA-Z_$0-9]*"; 
static final String paramSpecPatternText = "(<(.+)>)?" + "(" + varNamePatternText + ")"; 
static final Pattern paramSpecPattern = Pattern.compile(paramSpecPatternText); 

/** 
* @param s 
*/ 
public ParamSpec(String s) { 
    String[] ex = extract(s); 
    name = ex[0]; 
    format = ex[1]; 
    formatPattern = Pattern.compile(format); 
} 

public static String[] extract(String s) { 
    Matcher matcher = paramSpecPattern.matcher(s); 
    if (matcher.find()) { 
     String form = matcher.group(2); 
     form = form == null ? "" : form; 
     String var = matcher.group(3); 
     return new String[] { form, var }; 
    } 
    throw new RuntimeException("param spec does not match the pattern: " + paramSpecPatternText 
      + ". The input is: " + s); 
} 
0

我發現了一個例子對你有幫助。

private boolean acceptPath(String path) { 
    if(goodPaths.isEmpty()) 
     return true; 
    //If no path in filter, return true 
    boolean valid = true; 
    for(Pattern pathp : goodPaths) { 
     valid = pathp.matcher(path).find(); 
     if(valid) 
      break; 
    } 
    return valid; 
} 

全部代碼在這裏:http://code.openhub.net/file?fid=YNJFXZrLcZ6-dCCvz9HbeTu5AbQ&cid=RNO7S9fwx24&s=Match%20xml%20tag%20name%20using%20regular%20expression&pp=0&fl=Java&ff=1&filterChecked=true&fp=3212&mp,=1&ml=0&me=1&md=1&projSelected=true#L0