我不知道Ruby 2中的模式匹配是如何工作的。
我有以下值targetfilename = /mnt/usb/mpeg4Encoded.mpeg4
我的模式匹配if-else因此:
if (targetfilename.match(/^\//))
puts "amit"
else
puts "ramit"
输出为ramit
。
我不明白这种模式匹配是如何工作的。
答案 0 :(得分:1)
if targetfilename.match(/^V/)
puts "amit"
else
puts "ramit"
end
# result:
# "amit"
这是为什么?这是因为targetfilename.match(/^V/)
输出Matchdata对象(单击链接以获取此对象的完整描述)。这是一个包含“匹配”中所有信息的对象。如果没有匹配,则不返回MatchData对象,因为没有任何内容可以返回。相反,你得到nil
。
当您使用if
时,如果它尝试比较nil
,则会将其视为与false
相同的方式。
基本上,任何“实际”值(false
除外)的处理方式与true
相同。基本上,它要求
if (there's anything here)
do_this
else
do_something_else
end
再次,让我重申一下:
如果if
之后的内容是 false 或 nil ,则if语句会解析为“else”。
如果它是其他任何东西,它就会解析,好像它已经获得了“真实”声明。
正则表达式
/^V/
是所谓的“正则表达式”; //
是Regexp文字,与""
是字符串文字的方式相同,Regexp由Regexp类表示,与String类表示字符串的方式相同。
实际的“正则表达式”是斜杠之间的内容 - ^V
。这是说:
^
:字符串的开头V
:大写字母V 因此,/^V/
将匹配字符串开头的大写字母“V”的任何情况。
还有什么可以放在正则表达式中?有什么特殊字符?试试这个regexp cheat sheet
另外,一些很棒的工具: