Estoy tratando de analizar enlaces de texto sin formato y encontré este sitio realmente útil:

http://blog.mattheworiordan.com/post/13174566389/url-regular-expression-for-links-with-or-without

Hay un ejemplo del uso de esa expresión regular para hacer coincidir las URL, sin embargo, tengo algunos problemas para solucionarlo sintácticamente.

¿Cuál es el equivalente de esto en Java?

$(function() {
  var urlRegEx = /((([A-Za-z]{3,9}:(?:\/\/)?)(?:[\-;:&=\+\$,\w]+@)?[A-Za-z0-9\.\-]+|(?:www\.|[\-;:&=\+\$,\w]+@)[A-Za-z0-9\.\-]+)((?:\/[\+~%\/\.\w\-]*)?\??(?:[\-\+=&;%@\.\w]*)#?(?:[\.\!\/\\\w]*))?)/g;
  $('#target').html($('#source').html().replace(urlRegEx, "<a href='$1'>$1</a>"));
});

Cualquier ayuda o solución será muy apreciada.

Soy consciente de las clases Pattern y Matcher en Java pero no sé qué hace el .html() de jquery para implementar una solución. Gracias por adelantado.

1
user1841702 15 dic. 2016 a las 10:39

2 respuestas

La mejor respuesta

No necesita usar Pattern y Matcher directamente si necesita reemplazar la cadena que coincide, use String#replaceAll.

String input_str = "http://www.some.site.com?and=value&s=more\nhttp://10.23.46.134\nemail@me.at.site.com";
String regex = "(([A-Za-z]{3,9}:(?://)?)(?:[-;:&=+$,\\w]+@)?[A-Za-z0-9.-]+|(?:www\\.|[-;:&=+$,\\w]+@)[A-Za-z0-9.-]+)((?:/[+~%/.\\w-]*)?\\??(?:[-+=&;%@.\\w]*)#?(?:[.!/\\\\\\w]*))?";
String res = input_str.replaceAll(regex, "<a href='$0'>$0</a>");
System.out.println(res);
// => 
//  <a href='http://www.some.site.com?and=value&s=more'>http://www.some.site.com?and=value&s=more</a>
//  <a href='http://10.23.46.134'>http://10.23.46.134</a>
//  <a href='email@me.at.site.com'>email@me.at.site.com</a>

La expresión regular es la misma, solo elimine la inicial y la última / con el modificador g y el doble de otras barras diagonales inversas (y esas barras invertidas dentro de [...] se pueden eliminar todas excepto \w ). El grupo de captura externo se puede eliminar ya que puede usar una referencia inversa $0 para acceder a todo el valor de coincidencia en el patrón de reemplazo.

Consulte la demostración de expresiones regulares y una Demostración de Java.

2
Wiktor Stribiżew 15 dic. 2016 a las 07:57

Puede hacer algo como esto (ajuste la expresión regular para que se adapte a sus necesidades):

String originalString = "Please go to http://www.stackoverflow.com";
String newString = originalString.replaceAll("http://.+?(com|net|org)/{0,1}", "<a href=\"$0\">$0</a>");
0
Rajesh Panchal 15 dic. 2016 a las 07:48