我想匹配路径“/”。我尝试了以下替代方案,前两个确实匹配,但我不知道为什么第三个没有:
/\A\/\z/.match("/") # <MatchData "/">
"/\A\/\z/".match("/") # <MatchData "/">
Regexp.new("/\A\/\z/").match("/") # nil
这里发生了什么?他们为什么不同?
答案 0 :(得分:8)
第一个片段是唯一正确的片段。
第二个例子是......误导。字符串文字"/\A\/\z/"
显然不是正则表达式。这是一个字符串。字符串具有#match方法,该方法将其参数转换为正则表达式(如果不是一个)并与之匹配。因此,在这个例子中,它是正则表达式'/'
,它匹配另一个字符串中的正斜杠。
第三行完全被破坏了:不需要那里的周围斜线,它们是你没有使用的正则表达式文字的一部分。也可以使用单引号字符串,而不是双引号(试图解释转义序列,如\A
)
Regexp.new('\A/\z').match("/") # => #<MatchData "/">
当然,如果您只想检查字符串是否只包含一个正斜杠,则不需要上述任何一项。在这种情况下,只需使用相等检查。
s == '/'