我正在使用Ruby 1.9.2p320并运行以下代码片段:
a = ["abc", "def", "pqr", "xyz"]
z = ["abc", "xyz"]
a.grep(/#{z}/)
Run Code Online (Sandbox Code Playgroud)
这给出了这个输出:["abc", "xyz"].
a = ["abc_1", "def_1", "pqr_1", "xyz_1"]
z = ["abc_1", "xyz_1"]
a.grep(/#{z}/)
Run Code Online (Sandbox Code Playgroud)
但这给出了输出:["abc_1", "def_1", "pqr_1", "xyz_1"].
我所期待的只是["abc_1", "xyz_1"].
我得到那个输出的任何特殊原因?我怎么能得到预期的输出?
您正在以错误的方式构建正则表达式,您应该执行以下操作:
a = ["abc_1", "def_1", "pqr_1", "xyz_1"]
z = ["abc_1", "xyz_1"]
a.grep(Regexp.union(z))
# => ["abc_1", "xyz_1"]
Run Code Online (Sandbox Code Playgroud)
您的第一个示例似乎有效,因为#{z}插值为以下表达式:
/["abc", "xyz"]/
Run Code Online (Sandbox Code Playgroud)
这是一个chararcters类,只匹配"abc"和"xyz".在第二个示例#{z}中,iterpolated为以下字符类:
/["abc_1", "xyz_1"]/
Run Code Online (Sandbox Code Playgroud)
这匹配数组中的所有字符串,因为它们都包含字符1.