2013-01-31 137 views
-1

这是我的代码红宝石正则表达式返回

pong = /return/.match(cap.array[0]) 
if pong == "return" 
    puts "Pong" 
end 

cap.array[0]绝对匹配/return/,你可以看到,当我用pp

#<MatchData "return"> 

但由于某些原因,if语句不触发。任何想法,为什么它不匹配?我试图=====认为它可能是一个类型问题,但没有喜悦。

+0

什么是'帽.array [0]'?为什么不能优化您的代码以适应Q和A站点? – sawa

+0

它是由数据包的PcapRub生成的数组。我不认为有必要说明它是什么,因为我知道它是匹配的。 –

+0

你给读者带来额外的负担。你应该简单地给出一个字符串文字,或者写一些类似'some_string'的东西。这会更清楚。 – sawa

回答

1

Regex#match返回MatchData对象。因此,它与字符串的比较失败。

pong = /return/.match('i shall return this') 

# cast it to string 
if pong.to_s == "return" 

# or do this 
# if pong[0] == "return" 
    puts "Pong" 
end 
+0

完美,非常感谢(8分钟接受)。 –

3

为什么两次检查?你可以做到这一点的简单方法如下图所示:

if /return/ =~ cap.array[0] 
    puts "pong" 
end 

例如:

/return/ =~ "Functions return value" #=> 14 
/return/ =~ "return" #=> 0 

在红宝石:

puts "hello" if 0 #=> hello # 0 is not false 

这样可以尽量避免多次检查