gpt4 book ai didi

ruby - ruby 1.9.3 与 2.0.0 中的正则表达式负前瞻

转载 作者:数据小太阳 更新时间:2023-10-29 07:02:37 24 4
gpt4 key购买 nike

我需要匹配以 "bar" 结尾但不以 "foo" 开头的数组成员,并将结果放入一个新数组中。

查看 1.9.3 和 2.0.0 的文档,它们似乎支持使用相同语法的否定前瞻。 Negative look-ahead 在 ruby​​ 2.0.0 中的工作方式与我预期的一样,但在 ruby​​ 1.9.3 中似乎不起作用:

["foo a.bar", "b.bar"].grep(/(?!^foo\s).*\.bar$/)
# => ["b.bar"] (ruby 2.0.0)
# => ["foo a.bar", "b.bar"] (ruby 1.9.3)

此基础架构上的 ruby​​ 版本将在 4 个月内升级,但不能更早更改版本。我怎样才能使它在 1.9.3 中工作并最好在 2.0 中继续工作?

最佳答案

最好用这个,看起来更有说服力:

matched = array.grep(/^(?!foo\s).*\.bar$/)

NOT 以 foo 开头

这将适用于 2.1.1 和 1.9.3

只有当你想看看我做了什么时:

# ruby-1.9.3-p362
array = ["foo a.bar", "b.bar"]
# => ["foo a.bar", "b.bar"]
matched = array.grep(/(?!^foo\s).*\.bar$/)
# => ["foo a.bar", "b.bar"]
matched = array.grep(/^(?!foo\s).*\.bar$/)
# => ["b.bar"]
matched = array.grep(/(?!^foo\s).*\.bar$/)
# => ["foo a.bar", "b.bar"]

# ruby-2.1.1
array = ["foo a.bar", "b.bar"]
# => ["foo a.bar", "b.bar"]
matched = array.grep(/(?!^foo\s).*\.bar$/)
# => ["b.bar"]
matched = array.grep(/^(?!foo\s).*\.bar$/)
# => ["b.bar"]

关于ruby - ruby 1.9.3 与 2.0.0 中的正则表达式负前瞻,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23004527/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com