Регулярное выражение для получения атрибута из тега HTML
Я ищу регулярное выражение, которое может получить тег src (case insensitive) из следующих HTML-фрагментов в java.
<html><img src="kk.gif" alt="text"/></html>
<html><img src='kk.gif' alt="text"/></html>
<html><img src = "kk.gif" alt="text"/></html>
Ответы
Ответ 1
Одна возможность:
String imgRegex = "<img[^>]+src\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>";
- возможность (если совпадение не учитывается). Это немного беспорядок, и сознательно игнорирует случай, когда цитаты не используются. Чтобы представить его, не беспокоясь о стихах строк:
<img[^>]+src\s*=\s*['"]([^'"]+)['"][^>]*>
Это соответствует:
-
<img
- один или несколько символов, которые не являются
>
(то есть возможны другие атрибуты)
-
src
- необязательные пробелы
-
=
- необязательные пробелы
- начальный разделитель
'
или "
- источник изображения (который может не содержать одиночную или двойную кавычку)
- окончательный разделитель
- хотя выражение может остановиться здесь, я добавил:
- ноль или более символов, которые не являются
>
(более возможные атрибуты)
-
>
, чтобы закрыть тег
Примечания:
- Если вы хотите включить
src=
, переместите открытую скобку влево: -)
- Это не касается балансировки разделителя или значений атрибутов без разделителей, а также может захлебываться от плохо сформированных атрибутов (таких как атрибуты, которые включают
>
или источники изображений, которые включают '
или "
).
- Анализ HTML с регулярными выражениями, как это, является нетривиальным и, в лучшем случае, быстрым взломом, который работает в большинстве случаев.
Ответ 2
Этот вопрос здесь очень много.
Регулярные выражения - это плохой способ решения этой проблемы. Сделайте себе одолжение и используйте какой-либо HTML-парсер.
Регулярные выражения размыты для разбора HTML. Вы получите сложное выражение, которое будет вести себя неожиданно в некоторых случаях, которые будут иметь место в противном случае.
Изменить: Если ваш HTML-код прост, то:
Pattern p = Pattern.compile("src\\s*=\\s*([\\"'])?([^ \\"']*)");
Matcher m = p.matcher(str);
if (m.find()) {
String src = m.group(2);
}
И есть любое количество парсеров Java HTML.
Ответ 3
Этот ответ для поисковиков Google, потому что он слишком поздно
Копирование cletus показало ошибку и
Модифицировав его ответ и передав измененную строку src\\s*=\\s*([\"'])?([^\"']*)
в качестве параметра, переданного в Pattern.compile
, работал у меня,
Вот полный пример
String htmlString = "<div class=\"current\"><img src=\"img/HomePageImages/Paris.jpg\"></div>"; //Sample HTML
String ptr= "src\\s*=\\s*([\"'])?([^\"']*)";
Pattern p = Pattern.compile(ptr);
Matcher m = p.matcher(htmlString);
if (m.find()) {
String src = m.group(2); //Result
}
Ответ 4
Вы имеете в виду src-атрибут img-Tag? В этом случае вы можете пойти со следующим:
<[Ii][Mm][Gg]\\s*([Ss][Rr][Cc]\\s*=\\s*[\"'].*?[\"'])
Это должно сработать. Выражение src= '...' находится в скобках, поэтому оно является группой-разделителем и может обрабатываться отдельно.