2011-11-29 14 views
5

Używam tej metody do analizowania poza zwykły tekstowych adresów URL w pewnym HTML i uczynić łączy jemetoda String ReplaceAll nie działa

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

Brak adresy są zastąpione w HTML jednak. Wyrażenie regularne wydaje się pasować do adresów URL w innych testerach wyrażeń regularnych. Co się dzieje?

+1

możesz pisać przykładowy fragment kodu HTML? Czy na pewno linki znajdują się na początku linii? Dodałabym '\ s *' po '^', aby zezwolić na białe spacje. – sarumont

+1

+1 za zadawanie pytań na temat zamiany Wszystko, co nie było nieporozumieniem w związku z oczekiwaniem na regex :) – Affe

Odpowiedz

8

Zakotwiczenie oznacza, że ​​wyrażenie można dopasować tylko na początku łańcucha. Spróbuj go usunąć.

Wygląda również na to, że masz na myśli $0, a nie $1, ponieważ chcesz uzyskać cały mecz, a nie pierwszą grupę przechwytywania, która jest (https?|ftp|file).

Podsumowując, następujące prace dla mnie:

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

Dobre oko :) +1 ... – FailedDev

+1

Pracował jak urok. Właśnie uratowałeś mnie przed skokiem z mostu. – SeanPONeil

Powiązane problemy