Ruby on rails Ruby正则表达式用于匹配变量和两位数字之间的字符串

Ruby on rails Ruby正则表达式用于匹配变量和两位数字之间的字符串,ruby-on-rails,ruby,regex,Ruby On Rails,Ruby,Regex,我不能从正则表达式中得到我想要的 我正在查看包含以下内容的@my_string: "Black Multi/Wide Calf":[{"large":"http://ecx.images-willy.com/images /I/41suNF66r4L.jpg","variant":"MAIN","hiRes":"http://ecx.images-willy.com /images/I/51knTtAU6mL._UL1000_.jpg","thumb":"http://ecx.images-wi

我不能从正则表达式中得到我想要的

我正在查看包含以下内容的
@my_string

"Black Multi/Wide Calf":[{"large":"http://ecx.images-willy.com/images
/I/41suNF66r4L.jpg","variant":"MAIN","hiRes":"http://ecx.images-willy.com
/images/I/51knTtAU6mL._UL1000_.jpg","thumb":"http://ecx.images-willy.com
/images/I/41suNF66r4L._US40_.jpg","main":{"http://ecx.images-willy.com/images
/I/51knTtAU6mL._UY500_.jpg":["500","500""]}}],"Dark Brown":
[{"large":"http://ecx.images......
我有一个变量,它是:

@color = "Black Multi"
我的正则表达式看起来像:

/^#{@color}(.*)\d+(}\])$/i.match(@my_string)
我希望字符串以“Black Multi”开头,以
}]结尾。

Black Multi/Wide Calf":[{"large":"http://ecx.images-willy.com/images
/I/41suNF66r4L.jpg","variant":"MAIN","hiRes":"http://ecx.images-willy.com
/images/I/51knTtAU6mL._UL1000_.jpg","thumb":"http://ecx.images-willy.com
/images/I/41suNF66r4L._US40_.jpg","main":{"http://ecx.images-willy.com/images
/I/51knTtAU6mL._UY500_.jpg":["500","500""]}}]

我所拥有的都是零。我在哪里找到这个的?

看起来你的字符串是一个JSON编码的对象。不要试图用正则表达式解析它。而是使用JSON解析器对其进行解析,然后像平常一样访问其内容

require 'json'

my_string = '{"Black Multi/Wide Calf":[{"large":"http://ecx.images-willy.com/images/I/41suNF66r4L.jpg","variant":"MAIN","hiRes":"http://ecx.images-willy.com/images/I/51knTtAU6mL._UL1000_.jpg","thumb":"http://ecx.images-willy.com/images/I/41suNF66r4L._US40_.jpg","main":{"http://ecx.images-willy.com/images/I/51knTtAU6mL._UY500_.jpg":["500","500"]}}]}'
obj = JSON[my_string]
# => {"Black Multi/Wide Calf"=>
#      [{"large"=>"http://ecx.images-willy.com/images/I/41suNF66r4L.jpg",
#        "variant"=>"MAIN",
#        "hiRes"=>
#         "http://ecx.images-willy.com/images/I/51knTtAU6mL._UL1000_.jpg",
#        "thumb"=>
#         "http://ecx.images-willy.com/images/I/41suNF66r4L._US40_.jpg",
#        "main"=>
#         {"http://ecx.images-willy.com/images/I/51knTtAU6mL._UY500_.jpg"=>
#           ["500", "500"]}}]}
因为它现在是一个常规对象,在本例中是一个散列,所以很容易访问它的键/值对:

obj["Black Multi/Wide Calf"] # => [{"large"=>"http://ecx.images-willy.com/images/I/41suNF66r4L.jpg", "variant"=>"MAIN", "hiRes"=>"http://ecx.images-willy.com/images/I/51knTtAU6mL._UL1000_.jpg", "thumb"=>"http://ecx.images-willy.com/images/I/41suNF66r4L._US40_.jpg", "main"=>{"http://ecx.images-willy.com/images/I/51knTtAU6mL._UY500_.jpg"=>["500", "500"]}}]
而且很容易向下钻取:

obj["Black Multi/Wide Calf"][0]['large'] # => "http://ecx.images-willy.com/images/I/41suNF66r4L.jpg"

看起来您的字符串是一个JSON编码的对象。不要试图用正则表达式解析它。而是使用JSON解析器对其进行解析,然后像平常一样访问其内容

require 'json'

my_string = '{"Black Multi/Wide Calf":[{"large":"http://ecx.images-willy.com/images/I/41suNF66r4L.jpg","variant":"MAIN","hiRes":"http://ecx.images-willy.com/images/I/51knTtAU6mL._UL1000_.jpg","thumb":"http://ecx.images-willy.com/images/I/41suNF66r4L._US40_.jpg","main":{"http://ecx.images-willy.com/images/I/51knTtAU6mL._UY500_.jpg":["500","500"]}}]}'
obj = JSON[my_string]
# => {"Black Multi/Wide Calf"=>
#      [{"large"=>"http://ecx.images-willy.com/images/I/41suNF66r4L.jpg",
#        "variant"=>"MAIN",
#        "hiRes"=>
#         "http://ecx.images-willy.com/images/I/51knTtAU6mL._UL1000_.jpg",
#        "thumb"=>
#         "http://ecx.images-willy.com/images/I/41suNF66r4L._US40_.jpg",
#        "main"=>
#         {"http://ecx.images-willy.com/images/I/51knTtAU6mL._UY500_.jpg"=>
#           ["500", "500"]}}]}
因为它现在是一个常规对象,在本例中是一个散列,所以很容易访问它的键/值对:

obj["Black Multi/Wide Calf"] # => [{"large"=>"http://ecx.images-willy.com/images/I/41suNF66r4L.jpg", "variant"=>"MAIN", "hiRes"=>"http://ecx.images-willy.com/images/I/51knTtAU6mL._UL1000_.jpg", "thumb"=>"http://ecx.images-willy.com/images/I/41suNF66r4L._US40_.jpg", "main"=>{"http://ecx.images-willy.com/images/I/51knTtAU6mL._UY500_.jpg"=>["500", "500"]}}]
而且很容易向下钻取:

obj["Black Multi/Wide Calf"][0]['large'] # => "http://ecx.images-willy.com/images/I/41suNF66r4L.jpg"
您需要将“多行”标志(
/m
)添加到正则表达式:

str[/Black Multi.*?\}\]/m]
  #=> "Black Multi/Wide Calf\"......\"500\"\"]}}]" 
您需要将“多行”标志(
/m
)添加到正则表达式:

str[/Black Multi.*?\}\]/m]
  #=> "Black Multi/Wide Calf\"......\"500\"\"]}}]" 

现在还不清楚@my_字符串在那里应该等于什么。它看起来更像是一个散列的内容,最后被切掉了。现在还不清楚@my_字符串应该等于什么。它看起来更像是一个散列的内容,在接近尾声时被切掉了。太棒了。。谢谢你超越自我!但它的来源是一个网页。。所以我假设它不可能是json。。但见鬼,我会试试的!它是JavaScript对象表示的源代码。不要为此使用正则表达式,而是使用正确的工具。如果字符串是动态构建的,正则表达式将严重损坏,这是很有可能的。此外,如果这是在网页中,您如何检索JSON字符串本身?如果你使用正则表达式来达到这一点,你是在用一种艰难而不受欢迎的方式来实现的。你应该使用HTML解析器,比如Nokogiri.Nice!好的,那太好了。。我用的是Mechanize和Nokogiri。。但我不知道它是什么,只是用正则表达式和字符串匹配来达到我要去的地方,它可以通过正则表达式来实现,但同时它非常脆弱且容易出错,这就是为什么我们不使用它们来解析HTML或XML,除非它是一种非常简单的模式,并且我们不使用标记开始/结束或引号的匹配项,并且不存在跨行边界的行被打断的可能性,case也不会改变。。。。看见答案很好地讨论了可能出现的问题。太棒了。。谢谢你超越自我!但它的来源是一个网页。。所以我假设它不可能是json。。但见鬼,我会试试的!它是JavaScript对象表示的源代码。不要为此使用正则表达式,而是使用正确的工具。如果字符串是动态构建的,正则表达式将严重损坏,这是很有可能的。此外,如果这是在网页中,您如何检索JSON字符串本身?如果你使用正则表达式来达到这一点,你是在用一种艰难而不受欢迎的方式来实现的。你应该使用HTML解析器,比如Nokogiri.Nice!好的,那太好了。。我用的是Mechanize和Nokogiri。。但我不知道它是什么,只是用正则表达式和字符串匹配来达到我要去的地方,它可以通过正则表达式来实现,但同时它非常脆弱且容易出错,这就是为什么我们不使用它们来解析HTML或XML,除非它是一种非常简单的模式,并且我们不使用标记开始/结束或引号的匹配项,并且不存在跨行边界的行被打断的可能性,case也不会改变。。。。看见答案很好地讨论了可能出现的问题。