2011-11-29 14 views
5

sto usando questo metodo per analizzare gli URL di testo in un certo HTML e farli linkmetodo String ReplaceAll non funziona

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; 
} 

Non gli URL vengono sostituiti nel codice HTML comunque. L'espressione regolare sembra corrispondere agli URL di altri tester di espressioni regolari. Cosa sta succedendo?

+1

di poter postare un esempio frammento di codice HTML? Sei sicuro che i link siano tutti all'inizio della linea? Aggiungerei '\ s *' dopo '^' per consentire spazi bianchi. – sarumont

+1

+1 per aver fatto una domanda su replaceAll che non era confusione sul fatto che si aspettasse una regex :) – Affe

risposta

8

L'ancoraggio ^ indica che la regex può corrispondere solo all'inizio della stringa. Prova a rimuoverlo.

Inoltre, sembra che si intenda $0 anziché $1, poiché si desidera l'intera corrispondenza e non il primo gruppo di acquisizione, che è (https?|ftp|file).

In sintesi, le seguenti opere per me:

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

Good eye :) +1 ... – FailedDev

+1

Ha funzionato come un fascino. Mi hai appena salvato dal saltare da un ponte. – SeanPONeil

Problemi correlati