我正在尝试使用以下正则表达式
~r/(?<cmd>.*)(:(?<args>.*))?/
获取以下行为
"COMMAND:ARGS" => %{cmd: "COMMAND", args: "ARGS"}
"COMMAND" => %{cmd: "COMMAND", args: nil}
但我得到的只是
iex(66)> Regex.named_captures(~r/(?<cmd>.*)(:(?<args>.*))?/, "COMMAND:ARG")
%{"args" => "", "cmd" => "COMMAND:ARG"}
iex(67)> Regex.named_captures(~r/(?<cmd>.*)(:(?<args>.*))?/, "COMMAND")
%{"args" => "", "cmd" => "COMMAND"}
我做错了什么?
答案 0 :(得分:1)
(?<cmd>[^:]+)(?::(?<args>.*))?
(?<cmd>[^:\n]+)(?::(?<args>.*))? # for multiline content
(?<cmd>[^:\n]+)
将除:
或\n
(在第二个版本中)之外的任何字符捕获到名为cmd
(?::(?<args>.*))?
可选择匹配以下内容
:
按字面意思匹配(?<args>.*)
将该行的其余部分捕获到名为args
结果:
Match 1
Full match 0-12 `COMMAND:ARGS`
Group `cmd` 0-7 `COMMAND`
Group `args` 8-12 `ARGS`
Match 2
Full match 13-20 `COMMAND`
Group `cmd` 13-20 `COMMAND`