Tengo un área de texto wysiwyg en una aplicación web Java. Los usuarios pueden ingresar texto, darle un estilo o pegar texto con formato HTML.Vincular texto con expresiones regulares en Java
Lo que estoy tratando de hacer es linkify el texto. Esto significa, convertir todas las URL posibles dentro del texto, a su "contraparte de trabajo", es decir, agregar < a href = "..."> ... </a>.
Esta solución funciona cuando todo lo que tengo es texto plano:
String r = "http(s)?://([\\w+?\\.\\w+])+([a-zA-Z0-9\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)_\\-\\=\\+\\\\\\/\\?\\.\\:\\;\\'\\,]*)?";
Pattern pattern = Pattern.compile(r, Pattern.DOTALL | Pattern.UNIX_LINES | Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(comment);
comment = matcher.replaceAll("<a href=\"$0\">$0</a>"); // group 0 is the whole expression
pero el problema es cuando hay algún texto ya formateado, es decir, que ya tiene la < a href =". .. "> ... </a> etiquetas.
por lo que estoy buscando alguna forma para el patrón no coincidir cada vez que encuentra el texto entre dos etiquetas HTML (< a>). He leído que esto se puede lograr con lookahead o lookbehind pero todavía no puedo hacerlo funcionar. Estoy seguro de que lo estoy haciendo mal porque la expresión regular aún coincide. Y sí, he estado jugando/depurando grupos, cambiando $ 0 a $ 1, etc.
¿Alguna idea?
Me pregunto cuántas más preguntas sobre este tema son necesarias para que cada permutación del título ya exista en SO y la gente comience a usar una de las soluciones que ha sido resuelto previamente. – Tomalak
Pasé mucho tiempo con este y realicé algunas investigaciones, pero todavía no podía entenderlo. El desbordamiento de la pila me ayudó a encontrar la solución y ahora toda la comunidad puede aprovechar estas respuestas. es impreciso y ofensivo. –
también te desafío a que me muestres una solución a este problema que ya estaba en SO con un "título permutado" –