2012-10-02 54 views
0
<a href="$handler$&landing_url=https://foo.com/index.html"> 
    <img src="https://foo.com/images/08_180x80.gif" border="0" alt=""> 
</a> 

我有這個代碼,我需要返回到調用服務。然而,在返回的時候,我需要用我從道具文件中獲得的東西來替換$ handler $。這很簡單。如何解析href與img

困難的部分是:

我需要得到landing_url,對其進行加密,還可以添加更多的信息給它。

我怎麼能分析該片段成片?

還是有更簡單的方法來做到這一點?

回答

1

這是你所需要的正則表達式:/<a href=\".*?landing_url=(.*?)\">/

把所有的代碼放在一起:

public static void main(String[] args) { 
    String str = "<a href=\"$handler$&landing_url=https://foo.com/index.html\">"; 
    String regex = "<a href=\".*?landing_url=(.*?)\">"; 
    List<String> parts = evaluate(regex, str); 
    System.out.println("landing_url: " + parts.get(0)); 
} 

public static List<String> evaluate(String regex, String line) { 
    List<String> result = new ArrayList<String>(); 
    Pattern pattern = Pattern.compile(regex); 

    int count = 1; 
    Matcher matcher = pattern.matcher(line); 
    while (matcher.find()) { 
     result.add(matcher.group(count++)); 
    } 
    return result; 
} 
+0

感謝了一堆,我會嘗試一下,把它從這裏開始。 gracias :) – DarthVader

+0

一些解釋。 evaluate()只是我編寫的用於處理正則表達式的幫助器函數。 關於正則表達式,。*?匹配任何字符,但可能的最短匹配。如果你跳過'?'字符,'。*'將匹配字符串的所有字符。在括號中包含正則表達式使匹配的模式可以稍後檢索。由於您只對landing_url感興趣,這就是括號內的模式。 –

+0

真棒我會嘗試一下。感謝您的解釋 – DarthVader

0

有一對夫婦的方式在Java中做到這一點。

我想正確的答案取決於:

  1. 解析機制如何健壯,你需要
  2. href值字符串是如何獨特的是,和
  3. 您是否已經有一個HTML解析器到位。

假設你已經有一個HTML解析器,並且實際上可以獲取標籤的href屬性值,那麼從字符串中獲取landing_url的最簡單方法是使用String類的方法。雖然這些方法提供了一個快速和骯髒的解決方案,但它們可能不足以滿足字符串的所有排列。

下面是一些需要考慮的僞代碼,它不會是超高效或強大的,但它會完成工作。

(assuming the value is in String hrefValue) 
int x = hrefValue.indexOf("landing_url"); 
int substringStart = "landing_url=".length(); 
String substring = hrefValue.substring(substringStart); 
+0

我期待更像是一個正則表達式 – DarthVader