Elixir 正则表达式组和 ?-标记
Elixir regex groups and ?-mark
我正在尝试使用以下正则表达式
~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"}
我做错了什么?
(?<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`
我正在尝试使用以下正则表达式
~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"}
我做错了什么?
(?<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`