2012-09-12 27 views
6

Hola tengo un evento pequeño rubí que divide a cabo una serie de rubíes de la siguiente manera: -búsqueda de Ruby matrices con expresiones regulares Las expresiones

def rearrange arr,from,to 
    sidx = arr.index from 
    eidx = arr.index to 
    arr[sidx] = arr[sidx+1..eidx] 
end 

arr= ["Red", "Green", "Blue", "Yellow", "Cyan", "Magenta", "Orange", "Purple", "Pink", "White", "Black"] 
start = "Yellow" 
stop = "Orange" 

rearrange arr,start,stop 
puts arr.inspect 
#=> ["Red", "Green", "Blue", ["Cyan", "Magenta", "Orange"], "Cyan", "Magenta", "Orange", "Purple", "Pink", "White", "Black"] 

necesito utilización usar una expresión de expresiones regulares en mi arranque y parada búsquedas por ejemplo,

Start = "/ Yell /"

parada = "/ Ora /"

¿Hay una manera fácil de hacer esto yo en Ruby?

Respuesta

17

Por supuesto, el método index puede recibir un bloque, por lo que se podía hacer

sidx = arr.index{|e| e =~ from } 

Puede incluso echa un vistazo operador 'caso igualdad' agradable de Ruby y fácilmente cubrir ambas cadenas y expresiones regulares como argumentos:

sidx = arr.index{|e| from === e} # watch out: this is not the same as 'e === from' 

Entonces, si pasa una expresión regular como from, se llevará a cabo coincidencia de expresiones regulares, y si se pasa un String, buscaría cadena exacta.

+0

¡Excelente! Muy agradable. Funciona perfectamente. Gracias por la respuesta. – user1513388

+4

@ user1513388 Por favor [acepte la respuesta] (http://meta.stackexchange.com/a/5235) si resuelve su problema. –

Cuestiones relacionadas