У меня есть текстовая область wysiwyg в веб-приложении Java. Пользователи могут вводить текст и стилизовать его или вставлять текст в формате HTML.
Я пытаюсь связать текст. Это означает преобразование всех возможных URL-адресов в тексте в их «рабочий аналог», то есть добавление ... .
Это решение работает , когда все, что у меня есть, это простой текст:
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
Но проблема в том, что есть какой-то уже отформатированный текст, то есть он уже имеет теги ... .
Поэтому я ищу способ, которым шаблон не будет совпадать с всякий раз, когда он находит текст между двумя тегами HTML () . Я читал, что этого можно добиться с помощью lookahead или lookbehind , но я все еще не могу заставить его работать. Я уверен, что я делаю это неправильно, потому что регулярное выражение по-прежнему совпадает. И да, я играю / отлаживаю группы, меняю от 0 до 1 и т. Д.
Есть идеи?