Elixir中子串的模式匹配

sne*_*mer 3 elixir

如何在字符串上进行模式匹配,其中传递分号的任一侧将返回true?换句话说,是否有一种简单的模式匹配方式,它包含子串?

@matched_string "x-wat"

def match(@matched_string), do: true

match("x-wat") # true
match("x-wat; s-wat") # true
match("s-wat; x-wat") # true
match("s-wat") # false
match("x-wat-y") #false
Run Code Online (Sandbox Code Playgroud)

Dog*_*ert 9

不,这不能通过模式匹配来完成.您可以匹配字符串的前缀,或者如果您知道字符串开头的每个部分的长度,您可以指定它们的大小并匹配,例如<<_::size(4), @matched_string, _::binary>>,但您通常不能匹配任何任意子字符串.在这种情况下,您可以改为拆分;,修剪字符串,并检查它是否包含"x-wat":

def match(string) do
  string |> String.split(";") |> Enum.map(&String.trim/1) |> Enum.member?(string)
end
Run Code Online (Sandbox Code Playgroud)