Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 获取嵌套列表项的惯用长生不老药?_Elixir - Fatal编程技术网

Elixir 获取嵌套列表项的惯用长生不老药?

Elixir 获取嵌套列表项的惯用长生不老药?,elixir,Elixir,我有一个嵌套的列表项 [["Bearer"], ["xxxyyyxxxx123"]] # parsed from "Bearer xxxyyyxxxx123" 我只需要得到“xxxyyxx123”的值 我现在正在这样做,但我不认为这是惯用的 token = Regex.scan(~r/^Bearer|\w+/, header_content) |> List.flatten |> List.last 保持相同的Regex.scan/2调用的惯用方

我有一个嵌套的列表项

[["Bearer"], ["xxxyyyxxxx123"]] #  parsed from "Bearer xxxyyyxxxx123"
我只需要得到“xxxyyxx123”的值

我现在正在这样做,但我不认为这是惯用的

token = Regex.scan(~r/^Bearer|\w+/, header_content)
        |> List.flatten
        |> List.last

保持相同的
Regex.scan/2
调用的惯用方法是使用模式匹配

iex(1)> header_content = "Bearer xxxyyyxxxx123"
"Bearer xxxyyyxxxx123"
iex(2)> [_, [token]] = Regex.scan(~r/^Bearer|\w+/, header_content)
[["Bearer"], ["xxxyyyxxxx123"]]
iex(3)> token
"xxxyyyxxxx123"
除非我遗漏了什么,否则匹配此字符串的更惯用的方法(可能更有效)是使用不同的正则表达式和模式匹配:

iex(4)> [_, token] = Regex.run(~r/Bearer\s*(.*)/, header_content)
["Bearer xxxyyyxxxx123", "xxxyyyxxxx123"]
iex(5)> token
"xxxyyyxxxx123"

如果只是为了匹配字符串
“Bearer xxxyyyxxxx123”
,还有另一种惯用的长生不老药方法

iex(1)> "Bearer " <> token = "Bearer xxxyyyxxxx123"
"Bearer xxxyyyxxxx123"
iex(2)> token
"xxxyyyxxxx123"
iex(1)>“承载人”令牌=“承载人xxxyyxx123”
“持票人XXXYYYXX123”
iex(2)>令牌
“xxxyyyxxxx123”

请注意,只有当第一部分是文本二进制文件时,才可以像这样进行匹配。它被记录为Marco。

忽略整个单词作为匹配是如此普遍,以至于有一个选项用于该
:all_但_first
[token]=Regex.run(~r/Bearer\s*(.*)/,header\u content,capture::all\u,但不在前面)
我会伸手去拿
String.split/1
-
[\uu,token]=String.split(header\u content)
但是我很想知道那些知识更渊博的人的意见。我同意——在Elixir中使用模式匹配几乎总是比任何其他选项都更惯用。