Двойные кавычки в регулярном выражении

Как я могу получить строку внутри двойных кавычек, используя регулярное выражение?

У меня есть следующая строка:

<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=" и до "