2011-01-21 110 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示例中那樣表示爲模式,否則無需先從消息隊列中刪除它,就無法測試消息。然後,您可以使用正則表達式模塊來測試字符串並從中提取字段。

在可預見的未來我看不到這種變化。