The Ruby (1.9.3) la documentazione sembra implicare che la scansione è equivalente a = ~ se non che la scansioneruby regex scansione contro = ~
- restituisce più corrispondenze, mentre = ~ restituisce solo la prima occorrenza, e
- scan restituisce i dati della corrispondenza, mentre = ~ restituisce l'indice.
Tuttavia, nel seguente esempio, i due metodi sembrano restituire risultati diversi per la stessa stringa ed espressione. Perché?
1.9.3p0 :002 > str = "Perl and Python - the two languages"
=> "Perl and Python - the two languages"
1.9.3p0 :008 > exp = /P(erl|ython)/
=> /P(erl|ython)/
1.9.3p0 :009 > str =~ exp
=> 0
1.9.3p0 :010 > str.scan exp
=> [["erl"], ["ython"]]
Se l'indice del primo match è 0, non si deve eseguire la scansione di ritorno "Perl" e "Python" invece di "Erl" e "python"?
Grazie
Grazie, quindi la scansione non è strettamente equivalente a = ~, quando ci sono gruppi coinvolti? – Anand
@Anand Poiché la scansione restituisce qualcosa di completamente diverso da = ~, non penso sia mai esatto affermare che sono equivalenti. Il primo risultato restituito dalla scansione sarà una sottostringa che inizia all'indice 'str = ~ exp' se e solo se' exp' non contiene gruppi di cattura. In aggiunta a ciò si può anche dire che il primo risultato sarà equivalente a 'Regexp.last_match.string' dopo l'esecuzione di' str = ~ exp' se non contiene gruppi di cattura e 'Regexp.last_match.captures' se contiene gruppi di cattura. – sepp2k
Felice di vedere questo tipo di post che puoi davvero imparare. – texasbruce