有以下块:
receive
...
{raw, Text} ->
send(Socket, Text),
master(State);
...
end.
我想知道是否可以在Text中匹配正则表达式,并且如果Text匹配则有一个简单的子句。
答案 0 :(得分:6)
您不能直接在模式匹配中执行此操作(在本例中为接收模式),因为没有正则表达式模式。有一个正则表达式库,因此您可以在收到{text, Text}
消息后尝试匹配,但这与仅在与正则表达式匹配时有选择地接收消息不同。
如果您的正则表达式是Text
的常量前缀,例如"^some prefix"
,您可以使用"some prefix" ++ _Var
语法:
receive
...
{raw, Text = "some prefix" ++ _} ->
send(Socket, Text),
master(State);
...
end
答案 1 :(得分:4)
你不能在模式中使用正则表达式,至少不能使用正则表达式。模式与数据构造函数具有完全相同的结构。这意味着除非正则表达式非常简单并且可以表示为@archaelus示例中的模式,否则无法在不先将消息从消息队列中删除的情况下测试消息。然后,您可以使用正则表达式模块来测试字符串并从中提取字段。
在可预见的未来,我没有看到这种变化。