2012-06-22 58 views
0

使用在Heroku上運行的Rails,我遇到了在字符串中找到正則表達式匹配但沒有爲括號中的組設置$ 1變量的情況。這隻發生在我在Heroku上的生產環境中,而不是在我的本地系統上(Ruby ruby​​-1.9.2-p0的Rails 3.0.7)。該代碼是在Heroku上不能正常工作的Ruby匹配結果

puts "**** gateway_reply=#{gateway_reply}" 
match = gateway_reply =~ /ID: (\w+)/ 
msg_id = $1 
puts "**** match=#{match}, msg_id ($1) = #{$1}" 

在我的本地系統,輸出

**** gateway_reply=ID: da2x7s5tjumtxtnk1krl8wps4wpasiee 
**** match=0, msg_id ($1) = da2x7s5tjumtxtnk1krl8wps4wpasiee 

在生產系統中,$ 1未設置:

**** gateway_reply=ID: 93e4ca3590207761af6f3b5ba3545b36 
**** match=0, msg_id ($1) = 

任何答案爲是怎麼回事這裏?

+0

你在Heroku上使用什麼棧本場比賽的位置?你確定它符合你的開發環境嗎? – aubreyrhodes

+0

您可能希望使用's +'而不是正則表達式中的空格。根據環境,空間可以有很多不同的值 –

+0

這是一個好主意,Michael,雖然表達式匹配,但仍然應該返回1美元的值,不應該嗎?奧布里,堆棧是aspen-mri-1.8.6,* bamboo-mri-1.9.2,bamboo-ree-1.8.7,雪松。某些版本的Ruby對於匹配的返回值有不同的行爲嗎? –

回答

0

作品對我來說:

> gateway_reply='ID: da2x7s5tjumtxtnk1krl8wps4wpasiee' 
> gateway_reply.match(/ID: (\w+)/) 
> $1 
=> "da2x7s5tjumtxtnk1krl8wps4wpasiee" 

> gateway_reply =~ /ID: (\w+)/ 
=> 0 
> $1 
=> "da2x7s5tjumtxtnk1krl8wps4wpasiee" 

請注意,匹配運算符~的結果是