2011-11-29 79 views
5

我用這個方法在某些HTML解析出純文本的URL,讓他們聯繫字符串的replaceAll方法不工作

private String fixLinks(String body) { 
    String regex = "^(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]"; 
    body = body.replaceAll(regex, "<a href=\"$1\">$1</a>"); 
    Log.d(TAG, body); 
    return body; 
} 

沒有URL是在HTML但是更換。正則表達式似乎與其他正則表達式測試器中的URL匹配。這是怎麼回事?

+1

你可以張貼HTML的一個例子片斷?你確定鏈接全部在行首嗎?我會在'^'之後添加'\ s *'以允許空格。 – sarumont

+1

+1問一個關於replaceAll的問題,這不是對它期待一個正則表達式的困惑:) – Affe

回答

8

^錨表示正則表達式只能匹配字符串的開頭。嘗試刪除它。

此外,它看起來像你的意思是$0而不是$1,因爲你想要整個匹配而不是第一個捕獲組,即(https?|ftp|file)

綜上所述,對於我下面的作品:

private String fixLinks(String body) { 
    String regex = "(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]"; 
    body = body.replaceAll(regex, "<a href=\"$0\">$0</a>"); 
    Log.d(TAG, body); 
    return body; 
} 
+1

好眼睛:) +1 ... – FailedDev

+1

工作就像一個魅力。你剛剛救了我跳下一座橋。 – SeanPONeil