0

我不知道如何解释这一点,但我会尽力而为。我有一整行文本,我正在使用 SoapClient 和 PHP 从 API 中读取。当我获取数据时,它会将所有数据放在一行上。我希望能够过滤数据并使用 preg_match 将其放入数组中,但我不太确定我会使用什么模式来做到这一点。该示例来自聊天会话,并且我希望以时间戳开头的每一行新行。例如:

上午 8 点 02 分查理连接到聊天客户端 上午 8 点 04 分杰基特工说“嗨,查理,今天我有什么可以帮助你的” 上午 8 点 06 分查理说[s,“我正在寻找帐户余额。”

以上是如何将一行文本发送回给我的示例。但是,我希望能够按时间戳将其分解并位于如下数组中:

array(
    [0] => "8:02AM Charlie connects to chat client",
    [1] => "8:04am Agent Jackie says 'Hi Charlie, how can I help you today'",
    [2] => "8:06AM Charlie says, 'I'm looking to get an account balance.'"
)

我一直在谷歌和这里寻找,但我似乎找不到合适的措辞来寻找我需要的东西。

这是从 SoapClient 返回的数据:

stdClass Object (
 [getChatResult] => getChat_OK
 [sChatLog] => 8:02AM Charlie connects to chat client 8:04AM Agent Jackie says "Hi Charlie, how can I help you today" 8:06AM Charlie says, "I'm looking to get an account balance."
 )
4

2 回答 2

4

preg_split具有积极的前瞻 ( (?=...))。

preg_split('/(?=[12]?[0-9]:[0-9]{2}[ap]m)/i',$string,0,PREG_SPLIT_NO_EMPTY);
于 2012-01-26T21:11:32.107 回答
0
$s='8:02AM Charlie connects to chat client 8:04AM Agent Jackie says "Hi Charlie, how can I help you today" 8:06AM Charlie says, "I\'m looking to get an account balance."';

// Split the string
$pattern='/\d{1,2}\:\d\d[AaPp][Mm]\s/';
$split=preg_split($pattern, $s, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);

//Combine time and content
$final=array();
for ($i=0;$i<sizeof($split);) $final[]=$split[$i++].$split[$i++];

print_r($final);
于 2012-01-26T21:16:31.363 回答