如何找到前缀是否与Ruby中的某个字符串匹配?

问题描述 投票:0回答:1

我试图通过预定义的dir路径集,但我只有路径的前缀

我试过用include吗?或找到一种方法。我只能考虑定义一个正则表达式的简单解决方案,并在集合中为每个解决方案,但这似乎不是那么像红宝石般的样式

require 'set'

legal_paths = Set['A/B/C', 'A/D/E', 'A/F/G']
Dir.glob('**/system.log').each do |fd|
    if failed_tests_path.include?(fd) #fd for example = A/F/G/E/system.log, A/B/C/K/system.log etc...
        puts fd
    end
end

我希望fd只是路径包含在集合中的system.log文件(集合保存路径的前缀)

regex ruby collections prefix
1个回答
2
投票

如果这些只是前缀,请尝试String#start_with?

require 'set'

legal_paths = Set['A/B/C', 'A/D/E', 'A/F/G']
files = Dir.glob('**/system.log').select do |fd|
  fd.start_with?(*legal_paths)
end

为什么不利用你可以在glob中指定这些前缀的事实?

legal_paths = ['A/B/C', 'A/D/E', 'A/F/G']
files = Dir.glob("{#{legal_paths.join(',')}}/**/system.log")

请注意,如果用户输入legal_paths,则上述可能不安全,因为用户可以使用..遍历父目录。

© www.soinside.com 2019 - 2024. All rights reserved.