代码之家  ›  专栏  ›  技术社区  ›  Charles Okwuagwu

如何在Erlang/Elixir中执行不区分大小写的文件搜索

  •  3
  • Charles Okwuagwu  · 技术社区  · 9 年前

    Path.wildcard :filelib.wildcard 内部功能。

    匹配区分大小写,例如,“a”与“a”不匹配。 http://erlang.org/doc/man/filelib.html#wildcard-1 )

    请问有没有 不区分大小写

    1 回复  |  直到 9 年前
        1
  •  4
  •   Dogbert    9 年前

    f0o -&燃气轮机; [fF]0[oO] ,然后将其传递给 Path.wildcard/1

    defmodule A do
      def case_insensitive_glob(glob) do
        Regex.replace(~r/[a-zA-Z]/, glob, fn letter ->
          "[#{String.downcase(letter)}#{String.upcase(letter)}]"
        end)
      end
    end
    
    glob = A.case_insensitive_glob("**/*reAdmE.*") |> IO.inspect
    Path.wildcard(glob) |> IO.inspect
    

    在OTP源代码中运行它会生成所有文件,其名称在任何情况下都包含“reAdmE”。

    "**/*[rR][eE][aA][dD][mM][eE].*"
    ["README.md", "erts/emulator/pcre/README.pcre_update.md",
     "lib/erl_interface/src/README.internal",
     "lib/ic/examples/pre_post_condition/ReadMe.txt", "xcomp/README.md"]
    

    我已经用 find :

    $ find . -iname 'readme.*'
    ./erts/emulator/pcre/README.pcre_update.md
    ./lib/erl_interface/src/README.internal
    ./lib/ic/examples/pre_post_condition/ReadMe.txt
    ./README.md
    ./xcomp/README.md