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ę.
Niech będzie, że wzorzec to: BEGIN(.*)END. Tag otwierający został usunięty z głównego posta.
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");
}
}
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>".
Uruchomiłeś to u siebie? Bo ja dostaje przy tym stringu:
Found: Chcemy to co tu jest
Bez pozostałych znaczników.
Faktycznie, działa :) Nie zauważyłem w Twoim wzorcu pytajnika. Dałbyś mi radę powiedzieć jeszcze dlaczego on (pytajnik) jest potrzebny?
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
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.