2010-11-18 10 views
21

Biorąc pod uwagę coś takiego:szyny, Ruby - dany regex - określa policzyć Mecz

message.split(/\n.* at.* XXXXXXXX wrote:.*/m).first 

Działa to dobrze, jeśli jest mecz, ale jeśli nie dostać rubin mecz zwróci wszystkie wiadomości. Chciałbym najpierw sprawdzić, czy tam jest mecz, jeśli tak, to zwróć powyższe.

Pomysły? Dzięki

Odpowiedz

44

Jeśli próbujesz count liczba meczów, następnie używasz niewłaściwy sposób. Split jest przeznaczony do przeciągania sznurka i dzielenia go na kawałki, ale jak zauważyłeś, jeśli nie ma żadnych dopasowań, to zwraca całą rzecz. Myślę, że chcesz użyć String.scan zamiast:

message.scan(/\n.* at.* XXXXXXXX wrote:.*/m).size 
+0

Dzięki, ale gdzie to się dzieje? IE, jeśli znaleziono jakieś dopasowania. Muszę tylko wiedzieć, czy znaleziono mecz, czy nie. – AnApprentice

+0

Możesz również ustawić takie wyrażenie, otrzymuję komunikat o błędzie – AnApprentice

+0

"Powinienem mieć możliwość ustawienia takiego wyrażenia regularnego (działa dla mnie). Przepraszam, żeby sprawdzić, czy mówisz, że dosłownie chcesz wiedzieć, czy pasuje? (nie jest pan zainteresowany ekstrakcją żadnego tekstu?) –

1

Dobrze podzielony zwróci tablicę. Więc może po prostu sprawdzić na długości> 1

m = message.split(/\n.* at.* XXXXXXXX wrote:.*/m) 
if m.length > 1 
    return m.first 
else 
    return nil 
end 
+0

@Doon, przepraszam właśnie wypróbowałem to ... to zawsze zwraca m.pierwszy. Pomysły? – AnApprentice

+0

Oto co mam: m = to.split (./@ Mysite.com * /) jeśli m.length> 1 powrót m.first.strip inny powrót nil koniec – AnApprentice

+0

Wygląda to wszystko m.length czy liczenie postaci? – AnApprentice