获取Erlang中命名子模式的值

zsbz8rwp  于 2022-12-08  发布在  Erlang
关注(0)|答案(2)|浏览(177)

我有一个如下的正则表达式和值

2> re:run("first second", "^(?<foo>\\w+) (?<bar>\\w+)$", [{capture, [foo, bar], list}]).
{match,["first","second"]}
3>

这里我将foo与“first”匹配,将bar与“second”匹配。问题是在我的应用程序(url mapper)中,我不知道将有多少命名的子模式,以及它们的名称是什么。因此,我希望它们像这样匹配

2> re:magic_run("first second", "^(?<foo>\\w+) (?<bar>\\w+)$" ).
{match,[{foo, "first"},{bar, "second"}]}

我关心的不是输出格式。我希望能够将值与子模式名称匹配。有没有办法将值与子模式配对?

2q5ifsrm

2q5ifsrm1#

对于在2022年对此感兴趣的人。您可以获得指定捕获组的值,如下所示:

1> re:run("cat",".+(?P<A>at)", [{capture,['A'],list}]).
{match,["at"]}
2> re:run("catlololo",".+(?P<A>at)(?P<C>lol.+)", [{capture,['A','C'],list}]).
{match,["at","lololo"]}

capture后面的捕获组名称指定要读取的值。ref:https://www.erlang.org/doc/man/re.html#run-3

dddzy1tm

dddzy1tm2#

如果你的字符串不是正则的,不要使用正则表达式。特别是在你的情况下,我强烈建议使用某种类型的String.split()方法(从未编写过Erlang,但我认为有人可能已经实现了这一点)。

相关问题