Ruby 带有正则表达式数组的筛选器数组

Ruby 带有正则表达式数组的筛选器数组,ruby,regex,arrays,Ruby,Regex,Arrays,我正在使用Ruby 1.9.2p320并运行以下代码段: a = ["abc", "def", "pqr", "xyz"] z = ["abc", "xyz"] a.grep(/#{z}/) 这将产生以下输出:[“abc”,“xyz”] 但这会给出如下输出:[“abc_1”、“def_1”、“pqr_1”、“xyz_1”] 我所期望的只是[“abc_1”,“xyz_1”] 有什么特别的原因让我得到这样的结果吗?我怎样才能得到预期的输出呢?如果以错误的方式构建regexp,应该执行以下操作: a

我正在使用Ruby 1.9.2p320并运行以下代码段:

a = ["abc", "def", "pqr", "xyz"]
z = ["abc", "xyz"]
a.grep(/#{z}/)
这将产生以下输出:
[“abc”,“xyz”]

但这会给出如下输出:
[“abc_1”、“def_1”、“pqr_1”、“xyz_1”]

我所期望的只是
[“abc_1”,“xyz_1”]


有什么特别的原因让我得到这样的结果吗?我怎样才能得到预期的输出呢?

如果以错误的方式构建regexp,应该执行以下操作:

a = ["abc_1", "def_1", "pqr_1", "xyz_1"]
z = ["abc_1", "xyz_1"]

a.grep(Regexp.union(z))
# => ["abc_1", "xyz_1"]
您的第一个示例似乎有效,因为
#{z}
被插值为以下表达式:

/["abc", "xyz"]/
这是只与
“abc”
“xyz”
匹配的。在第二个示例中,
{z}
被指定为以下字符类:

/["abc_1", "xyz_1"]/

匹配数组中的所有字符串,因为它们都包含字符
1

如果以错误的方式构建regexp,则应执行以下操作:

a = ["abc_1", "def_1", "pqr_1", "xyz_1"]
z = ["abc_1", "xyz_1"]

a.grep(Regexp.union(z))
# => ["abc_1", "xyz_1"]
您的第一个示例似乎有效,因为
#{z}
被插值为以下表达式:

/["abc", "xyz"]/
这是只与
“abc”
“xyz”
匹配的。在第二个示例中,
{z}
被指定为以下字符类:

/["abc_1", "xyz_1"]/
它匹配数组中的所有字符串,因为它们都包含字符
1

请尝试以下操作:

a.grep(/#{z.join('|')}/)
# => ["abc_1", "xyz_1"]
它会创建有效的regexp-带有regexp“或”语句-
/abc_1 | xyz_1/

尝试以下操作:

a.grep(/#{z.join('|')}/)
# => ["abc_1", "xyz_1"]

它创建有效的regexp-with regexp“或”语句-
/abc_1 | xyz_1/

根据您的问题,以上两个答案都很好

但是如果您使用的是数组,为什么不使用
&
操作符呢

a = ["abc_1", "def_1", "pqr_1", "xyz_1"]
z = ["abc_1", "xyz_1"]
a & z
=> ["abc_1", "xyz_1"]

与使用grep和simpler的答案相同

根据您的问题,以上两个答案都非常好

但是如果您使用的是数组,为什么不使用
&
操作符呢

a = ["abc_1", "def_1", "pqr_1", "xyz_1"]
z = ["abc_1", "xyz_1"]
a & z
=> ["abc_1", "xyz_1"]

答案与使用grep和simpler时相同,我使用Ruby 2.0.0p247版进行了测试。同样的结果。不知道为什么会这样。我用Ruby版本2.0.0p247进行了测试。同样的结果。不知道为什么会这样。我让我的代码片段工作,但我不理解解释。请你详细说明,或者给我一个参考或链接。谢谢,我已经添加了一个字符类描述的链接,希望能有所帮助。我的代码片段可以正常工作,但我不理解解释。请你详细说明,或者给我一个参考或链接。谢谢,我已经添加了一个字符类描述的链接,希望能有所帮助。对不起,忘了提及。我想得到带有特定前缀的数组的子集。那样的话,你的方法就行不通了。对不起,忘了提一下。我想得到带有特定前缀的数组的子集。那样的话,你的方法就行不通了。