Ułożenie wyrażenia regularnego

Witam.
W dalszym ciągu poszerzam wiedzę ćwicząc na IRC bocie.
Postanowiłem mu dopisać pobieranie tekstów z basha.
Nie chcę w to angażować żadnych gemów itd. Ma to być prosty skrypcik.
Potrzebuję już tylko wyrażenia regularnego które mi “wytnie” kawałek tekstu.
Kod źródłowy strony:

[code]
#599937
+
9
-
 

		<div class="quote post-content post-body">

// Od tego momentu do…
ona znajduje sie w innej podsieci


mów do mnie rozwiązaniami a nie problemami


nie będzie działac
// tego momentu tekst mnie interesuje.

<!--[/code] To urywek strony bash.org.pl , by pokazać o co mi chodzi. Napisałem więc sobie prosty kod: [code = ruby] res = Net::HTTP.get_response(URI.parse('http://bash.org.pl/599937/')).body res.each {|l| if res = (/\s*(.*)\s*<\/div>/iu).match(l) then send"privmsg #{$chan} : #{res[1]}" end } [/code] Myślałem, że może nie znając wszystkich znaków tworzących wyrażenie zrobiłem błąd, więc zastąpiłem wszystkie "niepewne" kropką. Niestety wyrażenie nie zostaje dopasowane. Może ktoś wie co jest nie tak? Pewnie to jakiś banalny błąd, ale mam nadzieję, że się zbytnio śmiać nie będziecie. : P Bo sam już nie wiem jak to rozkminić po dwóch dniach myślenia.

w res masz stringa, wiec iterujesz po linijkach, a tego nie chcesz

zobacz coś ala code “ruby”.match(res)[/code]
dodałem multiline

Teraz dopasowuje wyrażenie ale wyświetla tylko 1 linię i nie poprzestaje na tylko wyświetla
(w oknie bota) dużo więcej. Oprócz tego wywala błąd: can’t convert MatchData into String

Może łatwiej?

http://bash.org.pl/text

i tam =~ #numer do #

i tyle

Ale wtopa. gotar dzięki. Wiszę Ci piwo za całą pomoc. :smiley:
Problem rozwiązany. :wink:

[quote=Risus]Teraz dopasowuje wyrażenie ale wyświetla tylko 1 linię i nie poprzestaje na tylko wyświetla
(w oknie bota) dużo więcej. Oprócz tego wywala błąd: can’t convert MatchData into String[/quote]
zobacz sobie pod hasłem non-greedy regex, po polsku to niezachłanne albo leniwe
co wyglądałoby tu tak

/<div\sclass..quote\spost.content\spost.body.>\s*(.*?)\s*<\/div>/ium

parsowanie html to bieda, poza nauką lepszy jest pomysł gotara

Pomyślę i nad tym, ale zrobię tak jak napisał gotar.

gotar, pomysł całkiem dobry, ale pod warunkiem, że plik z fortunkami pobierze raz i później będzie go aktualizował. W innym wypadku z każdym żądaniem będzie pobierał prawie 2MB danych, a mógłby pobrać tylko 5KB i pobrany kod HTML przeparsować za pomocą Nokogiri czy Hpricota.

W temacie (wątek już chyba był linkowany na tym forum): http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags

no zapewne, pobranie raz to jedyny slyuszny sposob, ja bym zrobil tak, ze sprawdza numer zadania, sa to id przyrostowe wiec jak ostatni z pobranych ma np 54342 to jak nizszy to skorzystaj z tego pliku co jest, jak nie to pobierz i tak dalej.

Sam bym uzyl Nokagiri, Hapikrota czy cos, ale na samej gorze pisze, ze nie chce uzywac zadnych pluginow, gemów itp. No więc selektory css itp odpadaja.

Heh, no tak, przeoczyłem “Nie chcę w to angażować żadnych gemów itd. Ma to być prosty skrypcik.”, ale było już późno :wink:

A sposób z Twojego ostatniego postu jest chyba najlepszy.