2011-04-27 10 views
7

Soy nuevo en expresiones regulares en Ruby.¿Cómo se extrae una subcadena de una cadena con una expresión regular?

La cadena se parece a http://www.site.com/media/pool/product_color_purple.jpg y estoy tratando de extraer de esto solo el bit que tiene el color. Esto puede ser de longitud variable, ya que algunos de los colores son como prince_purple.jpg.

por lo que tengo:

colour = c.attr('src').match(/(.*)color_(.*).jpg/) 
puts "Colour is #{colour}" 

Lo que vuelve de color es la cadena de nuevo, en lugar del bit extraído, que es el color. ¿Qué está mal aquí?

+0

'' match' vuelve MatchData' y "MTCH [ 0] es equivalente a la variable especial $ &, y devuelve la cadena coincidente completa. Mtch [1], mtch [2], y así sucesivamente, devuelve los valores de las referencias relacionadas "- http: //www.ruby-doc. o g/core/classes/MatchData.html –

+0

Tu enlace está roto. Es mejor mostrar aquí lo que quería mostrar. – sawa

Respuesta

0
>> s = %w(http://www.site.com/media/pool/product_color_purple.jpg http://www.site.com/media/pool/product_color_prince_purple.jpg) 
#=> ["http://www.site.com/media/pool/product_color_purple.jpg", "http://www.site.com/media/pool/product_color_prince_purple.jpg"] 
>> s.map { |c| c.match(/\w*_color_(\w+).jpg/)[1] } 
#=> ["purple", "prince_purple"] 
0

Puede probar esta expresión regular.

/color_(.*)?.jpg/ 
2

Sin Regexp como un ejemplo de otra forma de hacerlo

url="http://www.site.com/media/pool/product_color_purple.jpg" 
color = url[url.rindex("_")+1..-1].split(".")[0] 

Para esto se pegaría con expresión regular sin embargo.

color = url.match(/.*_(.*)\./)[1] 
3
url="http://www.site.com/media/pool/product_color_purple.jpg" 
color = url.scan(/color_(.*).jpg/)[0][0] 
#=> purple 

o

url="http://www.site.com/media/pool/product_color_purple.jpg" 
color = url.match(/color_(.*).jpg/)[1] 
#=> purple 
13
str="http://www.site.com/media/pool/product_color_purple.jpg" 
colour = str.match(/color_([^\/.]*).jpg$/) 
puts "Colour is #{colour[1]}" 

No se obtiene "El color es púrpura" porque concordancia devuelve MatchData, no

cadena
Cuestiones relacionadas