2011-11-29 9 views
5

estoy usando este método para analizar las URL de texto sin formato en algo de HTML y hacer que los vinculamétodo de String ReplaceAll no trabajar

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

No hay URLs son sustituidos en el HTML sin embargo. La expresión regular parece coincidir con las URL de otros verificadores de expresiones regulares. ¿Que esta pasando?

+1

Se puede publicar un ejemplo fragmento de HTML? ¿Estás seguro de que los enlaces están todos al comienzo de la línea? Agregaría un '\ s *' después de '^' para permitir el espacio en blanco. – sarumont

+1

+1 por hacer una pregunta acerca de replaceTodo eso no era confusión al respecto esperando una expresión regular :) – Affe

Respuesta

8

El anclaje ^ significa que la expresión regular solo puede coincidir al comienzo de la cuerda. Intenta eliminarlo

Además, parece que quiere decir $0 en lugar de $1, ya que desea la coincidencia completa y no el primer grupo de captura, que es (https?|ftp|file).

En resumen, las siguientes obras para mí:

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

Funcionó como un amuleto. Me acabas de salvar de tirarme de un puente. – SeanPONeil

Cuestiones relacionadas