Я ищу регулярное выражение, которое может получить тег 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>
Я ищу регулярное выражение, которое может получить тег 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>
Одна возможность:
String imgRegex = "<img[^>]+src\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>";
- возможность (если совпадение не учитывается). Это немного беспорядок, и сознательно игнорирует случай, когда цитаты не используются. Чтобы представить его, не беспокоясь о стихах строк:
<img[^>]+src\s*=\s*['"]([^'"]+)['"][^>]*>
Это соответствует:
<img
>
(то есть возможны другие атрибуты)src
=
'
или "
>
(более возможные атрибуты)>
, чтобы закрыть тегПримечания:
src=
, переместите открытую скобку влево: -)>
или источники изображений, которые включают '
или "
).Этот вопрос здесь очень много.
Регулярные выражения - это плохой способ решения этой проблемы. Сделайте себе одолжение и используйте какой-либо HTML-парсер.
Регулярные выражения размыты для разбора HTML. Вы получите сложное выражение, которое будет вести себя неожиданно в некоторых случаях, которые будут иметь место в противном случае.
Изменить: Если ваш HTML-код прост, то:
Pattern p = Pattern.compile("src\\s*=\\s*([\\"'])?([^ \\"']*)");
Matcher m = p.matcher(str);
if (m.find()) {
String src = m.group(2);
}
Этот ответ для поисковиков 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
}
Вы имеете в виду src-атрибут img-Tag? В этом случае вы можете пойти со следующим:
<[Ii][Mm][Gg]\\s*([Ss][Rr][Cc]\\s*=\\s*[\"'].*?[\"'])
Это должно сработать. Выражение src= '...' находится в скобках, поэтому оно является группой-разделителем и может обрабатываться отдельно.