Как я могу проанализировать это, используя StringUtils или регулярное выражение

#java #regex

#java #регулярное выражение

Вопрос:

В настоящее время я сталкиваюсь с проблемой, когда

 <a href="<a href="http://www.freeformatter.com/xml-formatter.html#ad-output" target="_blank">http://www.freeformatter.com/xml-formatter.html#ad-output</a>">Links</a>
  

Возвращается из службы, которую я использую. Как вы можете видеть, это недопустимый html. Кто-нибудь знает какие-либо инструменты или регулярные выражения, которые могут помочь мне удалить внутренний тег, чтобы изменить его на это:

 <a href="http://www.freeformatter.com/xml-formatter.html#ad-output">Links</a>
  

Редактировать:
Служба не всегда возвращает freeformatter.com веб-сайт. Он может возвращать ЛЮБОЙ веб-сайт

Комментарии:

1. вы пробовали что-нибудь до сих пор?

2. Сообщите об этом поставщику услуг.

3. Я пытался использовать инструмент Java.split и вручную изменять его, но мои решения кажутся слишком сложными и неуклюжими. Сообщит поставщику услуг, но на самом деле у него нет времени ждать, пока они внесут свои изменения

4. хорош ли jsoup для синтаксического анализа недопустимого html?

Ответ №1:

Если URL-адрес или содержимое в тегах изменятся, возможно, вам захочется использовать более обобщенный шаблон:

 (<a\shref="\w. ")\s. >"(. </a>)
  

Это, по сути, объединяет нужные части строки в две группы; которые затем могут быть собраны в одну строку. Вот рабочий пример:

http://ideone.com/TbOvVa

Комментарии:

1. Спасибо, это именно то, что я искал. Не очень хорошо работает с регулярными выражениями, так что это очень помогает.

Ответ №2:

В Java:

 String s = "<a href="<a href="http://www.freeformatter.com/xml-formatter.html#ad-output" target="_blank">http://www.freeformatter.com/xml-formatter.html#ad-output</a>">Links</a>;
  

(Вам нужно как-то сохранить его в виде строки в вашей программе)

Затем:

 s = s.replace("<a href="", "");
String[] pcs = s.split("http://www.freeformatter.com/xml-formatter.html#ad-output</a>">");
s = pcs[0]   pcs[1];
s = s.replace(" target="_blank"", "");
  

После всей этой обработки у вас будет правильная ссылка.

Комментарии:

1. о, извините, я не был ясен. Это может быть www.xxx . Не обязательно freeformatter.com

Ответ №3:

возьмите первый a href=» с .substring(0,8), затем используйте .split(«»>»,1) и используйте полученный массив с индексом 1.

Ответ №4:

Решение 1

Просто используйте функцию группировки регулярного выражения, которая фиксируется круглыми скобками () . Получите соответствующую группу, используя Matcher.group() метод.

Найдите все вхождения между > и < и объедините их в соответствии с вашими потребностями.

Вот шаблон регулярных >([^">].*?)< выражений. Взгляните на демонстрацию debuggex и regex101

Описание шаблона:

 .       Any character (may or may not match line terminators)
[^abc]  Any character except a, b, or c (negation)
X*?     X, zero or more times (Reluctant quantifiers)
(X)     X, as a capturing group
  

Подробнее о

Пример кода:

 String string = "<a href="<a href="http://www.freeformatter.com/xml-formatter.html#ad-output" target="_blank">http://www.freeformatter.com/xml-formatter.html#ad-output</a>">Links</a>";

Pattern p = Pattern.compile(">([^">].*?)<");
Matcher m = p.matcher(string);

while (m.find()) {
    System.out.println(m.group(1));
}
  

вывод:

 http://www.freeformatter.com/xml-formatter.html#ad-output
Links
  

Решение 2

Попробуйте String#replaceAll() использовать метод с использованием (</a>)[^$]|([^^]<a(.*?)>) шаблона регулярных выражений.

Шаблон гласит: замените все </a> , что не в конце, и <a.*?> что не в начале, двойными кавычками.

Найдите демонстрацию в regex101 и debuggex

Наглядное представление этого шаблона регулярных выражений:

введите описание изображения здесь

Пример кода:

 String string = "<a href="<a href="http://www.freeformatter.com/xml-formatter.html#ad-output" target="_blank">http://www.freeformatter.com/xml-formatter.html#ad-output</a>">Links</a>";

System.out.println(string.replaceAll("(</a>)[^$]|([^^]<a(.*?)>)", """));
  

вывод:

 <a href="http://www.freeformatter.com/xml-formatter.html#ad-output">Links</a>