PHP高级正则表达式拆分

时间:2014-12-23 14:23:18

标签: php regex

我面临着一个想法的轻微问题。

我在所有计算设备上的在线论坛中使用聊天功能。我也动摇地使用它,这会导致格式化,输入等方面的轻微问题。我有想法将所有聊天从中继帐户转发到我自己的移动友好站点。

我还没有开始发送消息,虽然我知道如何阅读消息。如何输出它们是个问题。

当我聊天使用ajax时,我在计算机上嗅出了传出的数据包。然后我找到了以下网址:http://server05.ips-chat-service.com/get.php?room=xxxx&user=xxxx&access_key=xxxx

页面输出与此类似的内容:~~||~~1419344231,1,kondaxdesign,Could somebody send a quick message for me__C__ please?,,10248~~||~~1419344237,1,tom.bridges,its a iso and a vm what more do we need to know?,,10880~~||~~

该字符串会在聊天中输出:http://i.stack.imgur.com/j7CM6.png

遗憾的是,我对正则表达式或任何其他可能会分裂它的函数知之甚少。是否有人能够协助我获得1)。姓名,2)。聊天数据和3)。时间戳?

如您所见,字符串是这样的:~~||~~[timestamp],1,[name],[data],,[some integer]~~||~~

干杯。

在阅读完字符串输出后,当有人离开聊天时,会发送:~~||~~1419344521,2,wegface,TIMEOUT,2_10828,0~~||~~

日志的开头以1,224442之前的~~||~~开头。

1 个答案:

答案 0 :(得分:1)

您首先explode每个记录,然后使用str_getcsv读取字符串并根据需要解析它。这是一个执行该操作的脚本,在输出上没有任何格式化,并且我已将变量命名为OP中描述它们的名称。

我不会使用正则表达式来解析字符串,因为更好的功能可用(上面链接)

$string = "~~||~~1419344231,1,kondaxdesign,Could somebody send a quick message for me__C__ please?,,10248~~||~~1419344237,1,tom.bridges,its a iso and a vm what more do we need to know?,,10880~~||~~";

//Split so we have each chat record to loop around
foreach( explode("~~||~~", $string) as $segments) {
    //Read the CSV properly
    $chat = str_getcsv($segments);
    if( count($chat) <> 6 ) { continue; } //Skip any that don't have all the data
    $timestamp = $chat[0];
    $name = $chat[2];
    $data = $chat[3];
    $some_integer = $chat[5];

    echo $name .' said - '. $data .'<br />';
}