2011-01-21 114 views

回答

6

由于没有正则表达式模式,因此您无法直接在模式匹配中执行此操作(本例中为接收模式)。有一个正则表达式库,所以您可以在收到{text, Text}消息后尝试匹配,但它与只有匹配正则表达式才有选择地接收消息不同。

的一个情况下,你可以做的比这更好的是,如果你的正则表达式的Text恒定的前缀,像"^some prefix",在那里你可以使用"some prefix" ++ _Var语法:

receive 
... 
    {raw, Text = "some prefix" ++ _} -> 
     send(Socket, Text), 
     master(State); 
... 
end 
+0

所以不可能在Text中过滤http URL吗? – Istvan 2011-01-21 21:09:40

+0

我认为简单的`文本= _ ++“http://”++ _`可以工作,但更好的方式 - 使用正则表达式模块和“if”或“case”语句 – seriyPS 2011-01-21 21:17:13

4

您不能使用使用正则表达式所有的模式,至少不是正则表达式。模式具有与数据构造函数完全相同的结构。这意味着,除非正则表达式非常简单并且可以像@archaelus示例中那样表示为模式,否则无需先从消息队列中删除它,就无法测试消息。然后,您可以使用正则表达式模块来测试字符串并从中提取字段。

在可预见的未来我看不到这种变化。