Wyrażenia regularne

0

Witam,
Chciałbym wyciągnąć wszystko co znajduje się między tagami i </tbody>. Jednak wzorzec: (.*)</tbody> nie działa jakbym sobie tego życzył. Wykracza poza granice </tbody> i bierze wszystkie znaki za nią. Domyślam się gdzie może leżeć problem, ale nie mam pomysłu jak to rozwiązać. Za wszelką pomoc z góry dziękuję.

0

Niech będzie, że wzorzec to: BEGIN(.*)END. Tag otwierający został usunięty z głównego posta.

1

O coś takiego chodzi?

public static void main(String[] args) {
    String test = "<html><body<tbody>Chcemy to co tu jest</tbody></body></html>";
    Pattern pattern = Pattern.compile("<tbody>(.*?)</tbody>");
    Matcher matcher = pattern.matcher(test);

    if(matcher.find())
    {
        System.out.println("Found: " + matcher.group(1));
    }
    else
    {
        System.out.println("No match");
    }
}
0
atmal napisał(a):

O coś takiego chodzi?

public static void main(String[] args) {
    String test = "<html><body<tbody>Chcemy to co tu jest</tbody></body></html>";
    Pattern pattern = Pattern.compile("<tbody>(.*?)</tbody>");
    Matcher matcher = pattern.matcher(test);

    if(matcher.find())
    {
        System.out.println("Found: " + matcher.group(1));
    }
    else
    {
        System.out.println("No match");
    }
}

Dokładnie tak. Tylko problem w tym, że taki wzorzec łapie również "</tbody></body></html>".

1

Uruchomiłeś to u siebie? Bo ja dostaje przy tym stringu:

Found: Chcemy to co tu jest

Bez pozostałych znaczników.

0

Faktycznie, działa :) Nie zauważyłem w Twoim wzorcu pytajnika. Dałbyś mi radę powiedzieć jeszcze dlaczego on (pytajnik) jest potrzebny?

3

Załóżmy że to jest twój tekst:

<tbody>Lorem </tbody>ipsum </tbody>

Jeżeli wpiszemy taki regex (bez ?)

<tbody>(.*)</tbody>

To "pochłonie" nam wszystko, aż do znalezienia ostatniego </tbody>. A więc wynik będzie taki:

Lorem </tbody>ipsum

Co innego gdy wpiszemy ? w regex (<tbody>(.*?)</tbody>). Wtedy regex będzie brał wszystko do pierwszego </tbody>. Czyli:

Lorem
0
atmal napisał(a):

Załóżmy że to jest twój tekst:

<tbody>Lorem </tbody>ipsum </tbody>

Jeżeli wpiszemy taki regex (bez ?)

<tbody>(.*)</tbody>

To "pochłonie" nam wszystko, aż do znalezienia ostatniego </tbody>. A więc wynik będzie taki:

Lorem </tbody>ipsum

Co innego gdy wpiszemy ? w regex (<tbody>(.*?)</tbody>). Wtedy regex będzie brał wszystko do pierwszego </tbody>. Czyli:

Lorem

O to mi chodziło. Dzięki piękne :) Miłego wieczoru.

1 użytkowników online, w tym zalogowanych: 0, gości: 1