Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何使用正则表达式从字符串中提取子字符串?_Ruby_Regex - Fatal编程技术网

Ruby 如何使用正则表达式从字符串中提取子字符串?

Ruby 如何使用正则表达式从字符串中提取子字符串?,ruby,regex,Ruby,Regex,我不熟悉Ruby中的正则表达式 字符串看起来像http://www.site.com/media/pool/product_color_purple.jpg我正试图从中提取具有颜色的位。这可能是一个可变长度,因为有些颜色类似于prince\u purple.jpg 因此,我: colour = c.attr('src').match(/(.*)color_(.*).jpg/) puts "Colour is #{colour}" 颜色返回的是字符串,而不是提取的位,即颜色。这里出了什么问题?您

我不熟悉Ruby中的正则表达式

字符串看起来像
http://www.site.com/media/pool/product_color_purple.jpg
我正试图从中提取具有颜色的位。这可能是一个可变长度,因为有些颜色类似于
prince\u purple.jpg

因此,我:

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

颜色返回的是字符串,而不是提取的位,即颜色。这里出了什么问题?

您可以试试这个正则表达式

>> 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"]
/color_(.*)?.jpg/

不使用Regexp作为另一种方法的示例

url="http://www.site.com/media/pool/product_color_purple.jpg"
color = url[url.rindex("_")+1..-1].split(".")[0]
为此,我会坚持使用regexp

color = url.match(/.*_(.*)\./)[1]


您不会得到“color is purple”,因为match返回MatchData,而不是string

match
返回
MatchData
,“mtch[0]相当于特殊变量$&,并返回整个匹配的字符串。mtch[1],mtch[2]等等返回匹配的反向引用的值”-您的链接已断开。最好在这里展示你想展示的东西。
url="http://www.site.com/media/pool/product_color_purple.jpg"
color = url.scan(/color_(.*).jpg/)[0][0]
#=> purple
url="http://www.site.com/media/pool/product_color_purple.jpg"
color = url.match(/color_(.*).jpg/)[1]
#=> purple
str="http://www.site.com/media/pool/product_color_purple.jpg"
colour = str.match(/color_([^\/.]*).jpg$/)
puts "Colour is #{colour[1]}"