Двойные кавычки в регулярном выражении
Как я могу получить строку внутри двойных кавычек, используя регулярное выражение?
У меня есть следующая строка:
<img src="http://yahoo.com/img1.jpg" alt="">
Я хочу получить строку http://yahoo.com/img1.jpg alt=""
снаружи.
Как это сделать, используя регулярное выражение?
Ответы
Ответ 1
Я не знаю, почему вы тоже хотите использовать тег alt, но это регулярное выражение делает то, что вы хотите:
Группа 1 - это URL, а группа 2 - это тег alt. Я мог бы немного изменить регулярное выражение, если между img и src может быть несколько пробелов, и если между '='
могут быть пробелы,
Pattern p = Pattern.compile("<img src=\"([^\"]*)\" (alt=\"[^\"]*\")>");
Matcher m =
p.matcher("<img src=\"http://yahoo.com/img1.jpg\" alt=\"\"> " +
"<img src=\"http://yahoo.com/img2.jpg\" alt=\"\">");
while (m.find()) {
System.out.println(m.group(1) + " " + m.group(2));
}
Вывод:
http://yahoo.com/img1.jpg alt=""
http://yahoo.com/img2.jpg alt=""
Ответ 2
Вы можете сделать это следующим образом:
Pattern p = Pattern.compile("<img src=\"(.*?)\".*?>");
Matcher m = p.matcher("<img src=\"http://yahoo.com/img1.jpg\" alt=\"\">");
if (m.find())
System.out.println(m.group(1));
Однако, если вы разбираете HTML, рассмотрите возможность использования некоторой библиотеки: регулярное выражение не является хорошей идеей для синтаксического анализа HTML. У меня были хорошие впечатления от jsoup: вот пример:
String fragment = "<img src=\"http://yahoo.com/img1.jpg\" alt=\"\">";
Document doc = Jsoup.parseBodyFragment(fragment);
Element img = doc.select("img").first();
String src = img.attr("src");
System.out.println(src);
Ответ 3
Это должно выполнить задание:
String url = "";
Pattern p = Pattern.compile("(?<=src=\")[^\"]*(?=\")");
Matcher m = p.matcher("<img src=\"http://yahoo.com/img1.jpg\" alt=\"\">");
if (m.find())
url = m.group());
Парсер будет принимать каждый char кроме "
после src="
и до "