这三种编写Ruby正则表达式的替代方法有什么区别?

时间:2016-05-21 18:07:33

标签: ruby regex

我想匹配路径“/”。我尝试了以下替代方案,前两个确实匹配,但我不知道为什么第三个没有:

/\A\/\z/.match("/")                # <MatchData "/">
"/\A\/\z/".match("/")              # <MatchData "/">
Regexp.new("/\A\/\z/").match("/")  # nil

这里发生了什么?他们为什么不同?

1 个答案:

答案 0 :(得分:8)

第一个片段是唯一正确的片段。

第二个例子是......误导。字符串文字"/\A\/\z/"显然不是正则表达式。这是一个字符串。字符串具有#match方法,该方法将其参数转换为正则表达式(如果不是一个)并与之匹配。因此,在这个例子中,它是正则表达式'/',它匹配另一个字符串中的正斜杠。

第三行完全被破坏了:不需要那里的周围斜线,它们是你没有使用的正则表达式文字的一部分。也可以使用单引号字符串,而不是双引号(试图解释转义序列,如\A

Regexp.new('\A/\z').match("/") # => #<MatchData "/">

当然,如果您只想检查字符串是否只包含一个正斜杠,则不需要上述任何一项。在这种情况下,只需使用相等检查。

s == '/'