如何在Erlang中使用正则表达式匹配正则表达式?
问题描述:
有以下模块:如何在Erlang中使用正则表达式匹配正则表达式?
receive
...
{raw, Text} ->
send(Socket, Text),
master(State);
...
end.
我想知道是否有可能匹配文本正则表达式,有一个简单的条款,如果文本匹配。
答
由于没有正则表达式模式,因此您无法直接在模式匹配中执行此操作(本例中为接收模式)。有一个正则表达式库,所以您可以在收到{text, Text}
消息后尝试匹配,但它与只有匹配正则表达式才有选择地接收消息不同。
的一个情况下,你可以做的比这更好的是,如果你的正则表达式的Text
恒定的前缀,像"^some prefix"
,在那里你可以使用"some prefix" ++ _Var
语法:
receive
...
{raw, Text = "some prefix" ++ _} ->
send(Socket, Text),
master(State);
...
end
答
您不能使用使用正则表达式所有的模式,至少不是正则表达式。模式具有与数据构造函数完全相同的结构。这意味着,除非正则表达式非常简单并且可以像@archaelus示例中那样表示为模式,否则无需先从消息队列中删除它,就无法测试消息。然后,您可以使用正则表达式模块来测试字符串并从中提取字段。
在可预见的未来我看不到这种变化。
你的意思是,只有当'文本'符合正则表达式时,你才想收到消息? – 3lectrologos 2011-01-21 20:26:00