使用正则表达式数组过滤数组

Chi*_*hah 1 ruby regex arrays

我正在使用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"].

我得到那个输出的任何特殊原因?我怎么能得到预期的输出?

tor*_*o2k 5

您正在以错误的方式构建正则表达式,您应该执行以下操作:

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.