了解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

我不知道模式匹配在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"
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
后面的内容是falsenil,If语句将解析为“else”。 如果是别的,它会像得到了一个“真实”的陈述一样进行解析


正则表达式

/^V/
是所谓的“正则表达式”;
/
是Regexp文本,与
是字符串文本的方式相同,Regexp由Regexp类表示,与字符串由String类表示的方式相同

实际的“正则表达式”是斜杠之间的内容--
^V
。这是说:

  • ^
    :字符串的开头
  • V
    :大写字母V
因此,
/^V/
将匹配字符串开头大写字母“V”的任何大小写

在正则表达式中还可以放入什么?有什么特别的角色?试试这个

还有一些很棒的工具:

  • --输入正则表达式,然后输入相同的文本,然后查看匹配的内容
  • --输入一个正则表达式,并看到它“直观地”表示

谢谢JUSTIN…但是JUSTIN我想说的是(/^\/)是如何工作的实际上我已经知道了matchdataobject和nil value之类的事实