gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 21:50:28 25 4
gpt4 key购买 nike

Elixir 提供了Path.wildcard,它在内部使用了Erlang :filelib.wildcard 函数。

Matching is case-sensitive, for example, "a" does not match "A". (http://erlang.org/doc/man/filelib.html#wildcard-1)

请问是否有不区分大小写的替代方案?

最佳答案

没有内置选项可以执行此操作,但由于通配符语法支持类似于正则表达式的字符交替,您可以用其大小写版本的交替替换每个字母,例如f0o -> [fF]0[oO],然后将其传递给 Path.wildcard/1。这是对 ASCII 字母执行此操作的简单实现:

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

关于erlang - 如何在 Erlang/Elixir 中执行不区分大小写的文件搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45597018/

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