2010-11-18 13 views
21

qualcosa di dato, come:rotaie, rubino - Dato un Regex - Determinare Count the Match

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

Questo funziona bene se c'è una partita, ma se non ottiene una corrispondenza rubino restituisce tutti messaggio. Vorrei prima vedere se c'è una corrispondenza, in caso affermativo, quindi restituire quanto sopra.

Idee? Grazie

risposta

44

Se stai cercando di conteggio il numero di partite, allora si sta utilizzando il metodo sbagliato. Split è progettato per prendere una stringa e tagliarla a pezzi, ma come hai osservato, se non ci sono corrispondenze, restituisce il tutto. Penso che tu voglia utilizzare String.scan invece:

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

Grazie ma da dove viene la lunghezza? IE se sono state trovate corrispondenze. Ho solo bisogno di sapere se una partita è stata trovata o meno. – AnApprentice

+0

Inoltre, puoi impostare un'espressione regolare del genere, ricevo un errore – AnApprentice

+0

Puoi _should_ essere in grado di impostare un'espressione regolare come quella (funziona per me). Scusa, solo per controllare, stai dicendo letteralmente _giusto_ vuoi sapere se corrisponde? (ad esempio, non ti interessa estrarre il testo?) –

1

Ben diviso restituirà un array. Quindi, si può solo verificare la presenza di lunghezza> 1

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

@Doon, scusa, ho appena provato ... restituisce sempre il primo. Idee? – AnApprentice

+0

Ecco quello che ho: m = to.split (./@ Mysite.com * /) se m.length> 1 ritorno m.first.strip altro ritorno nullo fine – AnApprentice

+0

assomiglia a tutto m.length è fare è contare i personaggi? – AnApprentice

Problemi correlati