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

how to find if prefix is a match to some string in a set in Ruby?

我正在尝试通过预定义的目录路径集,但我只有路径的前缀

我试过使用include?或者找到一种方法来做到这一点。 我只能考虑定义一个正则表达式并针对集合中的每个进行处理的简单解决方案,但这似乎不是 ruby 风格

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 路径包含在集合中的文件(集合包含路径的前缀)

如果这些只是前缀,请尝试 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 是由用户输入的,则上述内容可能不安全,因为用户可以使用 ...

遍历到父目录