Current section
Files
Jump to
Current section
Files
lib/wildcard.ex
defmodule AntlUtilsElixir.Wildcard do
@spec match?(pattern :: binary, expr :: binary, separator :: binary, wildcard_char :: binary) ::
boolean
def match?(pattern, expr, separator, wildcard_char)
when is_binary(pattern) and is_binary(expr) and is_binary(separator) and
is_binary(wildcard_char) do
pattern
|> String.replace(separator, "\\.")
|> String.replace(wildcard_char, ".+")
|> then(&("^" <> &1 <> "$"))
|> Regex.compile!()
|> Regex.match?(expr)
end
@spec pattern_valid?(binary, binary, binary) :: boolean
def pattern_valid?(pattern, separator, wildcard_char),
do: pattern_regex!(separator, wildcard_char) |> Regex.match?(pattern)
@spec expr_valid?(binary, binary, binary) :: boolean
def expr_valid?(expr, separator, wildcard_char),
do: expr_regex!(separator, wildcard_char) |> Regex.match?(expr)
@spec expr_regex!(binary, binary) :: Regex.t()
def expr_regex!(separator, wildcard_char) do
("^(?!" <> "\\#{separator}" <> ")")
|> Kernel.<>("(?!.*" <> "?" <> "\\#{separator}\\#{separator}" <> ")")
|> Kernel.<>("(?!.*" <> "\\#{wildcard_char}" <> ".*" <> ")")
|> Kernel.<>("(?!.*" <> "\\#{separator}$" <> ")")
|> Regex.compile!()
end
@spec pattern_regex!(binary, binary) :: Regex.t()
def pattern_regex!(separator, wildcard_char) do
"^(?!\\#{separator})"
|> Kernel.<>("(?!.*" <> "?" <> "\\#{separator}\\#{separator}" <> ")")
|> Kernel.<>("(?!.*" <> "\\#{wildcard_char}\\#{separator}\\#{wildcard_char}.*)")
|> Kernel.<>("(?!.*\\#{separator}$)")
|> Regex.compile!()
end
end