Как извлечь всю подстроку, сопоставив регулярное выражение? - PullRequest
0 голосов
/ 28 февраля 2011

Я хочу извлечь значения всех атрибутов src в этой строке, как мне это сделать:

<p>Test&nbsp;
<img alt="70" width="70" height="50" src="/adminpanel/userfiles/image/1.jpg" />
Test 
<img alt="70" width="70" height="50" src="/adminpanel/userfiles/image/2.jpg" />
</p>

Ответы [ 4 ]

3 голосов
/ 28 февраля 2011

Вот, пожалуйста,

String data = "<p>Test&nbsp;\n" +
    "<img alt=\"70\" width=\"70\" height=\"50\" src=\"/adminpanel/userfiles/image/1.jpg\" />\n" +
    "Test \n" +
    "<img alt=\"70\" width=\"70\" height=\"50\" src=\"/adminpanel/userfiles/image/2.jpg\" />\n" +
    "</p>";
Pattern p0 = Pattern.compile("src=\"([^\"]+)\"");
Matcher m = p0.matcher(data);
while (m.find())
{
  System.out.printf("found: %s%n", m.group(1));
}

У большинства разновидностей регулярных выражений есть сокращение для захвата всех совпадений, например, метод scan Руби или .NET Matches() .NET, но в Java всегда нужно прописывать.

0 голосов
/ 28 февраля 2011

извините за то, что не закодировал (не хватает времени), как насчет: 1. (при условии, что размер файла является разумным) прочитать весь файл в строку.2. Разбить строку String arround "src = \" "(предположим, что результирующий массив называется strArr). 3. Зациклить полученный массив строк и сохранить strArr [i] .substring (0, strArr [i] .indexOf (" \ ")."/>")) к некоторой коллекции источников изображений.

Aviad

0 голосов
/ 28 февраля 2011

, так как вы запросили реализацию регулярного выражения ...

import java.util.regex.Matcher; 
import java.util.regex.Pattern;

public class Test {
    private static String input = "....your html.....";

    public static void main(String[] args) {
        Pattern pattern = Pattern.compile("src=\".*\"");
        Matcher matcher = pattern.matcher(input);
        while (matcher.find()) {
            System.out.println(matcher.group());
        }

    } 
}

Возможно, вам придется настроить регулярное выражение, если ваши атрибуты src не заключены в двойные кавычки

0 голосов
/ 28 февраля 2011

Идея - разделить символ '"', посмотреть на каждую часть, если она содержит имя атрибута src и - если да - сохранить следующее значение, которое является атрибутом src.

String[] parts = thisString.split("\"");  // splits at " char
List<String> srcAttributes = new ArrayList<String>();
boolean nextIsSrcAttrib = false;
for (String part:parts) {
  if (part.trim().endsWith("src=") {
    nextIsSrcAttrib = true; {
  else if (nextIsSrcAttrib) {
    srcAttributes.add(part);
    nextIsSrcAttrib = false;
  }
}

Лучшая идея - подать его в обычный html-анализатор и извлечь значения всех атрибутов src из всех img элементов. Но вышесказанное должно работать как простое решение, особенно в непроизводственном коде.

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