了解Ruby 2中模式匹配的工作原理
我不知道模式匹配在Ruby 2中是如何工作的 我有以下值,了解Ruby 2中模式匹配的工作原理,ruby,pattern-matching,Ruby,Pattern Matching,我不知道模式匹配在Ruby 2中是如何工作的 我有以下值,targetfilename=/mnt/usb/mpeg4Encoded.mpeg4 我的模式匹配如果else是这样的: if (targetfilename.match(/^\//)) puts "amit" else puts "ramit" 输出为ramit 我不明白这种模式匹配是如何工作的 if targetfilename.match(/^V/) puts "amit" else puts "ramit" e
targetfilename=/mnt/usb/mpeg4Encoded.mpeg4
我的模式匹配如果else是这样的:
if (targetfilename.match(/^\//))
puts "amit"
else
puts "ramit"
输出为ramit
我不明白这种模式匹配是如何工作的
if targetfilename.match(/^V/)
puts "amit"
else
puts "ramit"
end
# result:
# "amit"
为什么会这样?这是因为targetfilename.match(/^V/)
输出一个对象(单击链接可获取此对象的完整描述)。这是一个包含“匹配”中所有信息的对象。如果没有匹配项,则不会返回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
。这是说:
:字符串的开头^
:大写字母VV
/^V/
将匹配字符串开头大写字母“V”的任何大小写
在正则表达式中还可以放入什么?有什么特别的角色?试试这个
还有一些很棒的工具:
- --输入正则表达式,然后输入相同的文本,然后查看匹配的内容
- --输入一个正则表达式,并看到它“直观地”表示