Двойные кавычки в регулярном выражении - PullRequest
11 голосов
/ 15 июня 2011

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

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

<img src="http://yahoo.com/img1.jpg" alt="">

Я хочу получить строку http://yahoo.com/img1.jpg alt="" снаружи. Как я могу сделать это с помощью регулярного выражения?

Ответы [ 3 ]

10 голосов
/ 15 июня 2011

Я не знаю, зачем вам также нужен тег 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=""
8 голосов
/ 15 июня 2011

Вы можете сделать это так:

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);
2 голосов
/ 15 июня 2011

Это должно сделать работу:

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());

Парсер будет принимать каждый символ , за исключением " после src=" и до "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...