Использование Preg Match для разрыва строки на всю строку текста по метке времени - PullRequest
0 голосов
/ 27 января 2012

Я не знаю, как это объяснить, но я буду стараться изо всех сил.У меня есть полная строка текста, который я читаю из API, используя SoapClient с PHP.Когда я получаю данные, все данные помещаются в одну строку.Я хочу иметь возможность фильтровать данные и выбрасывать их в массив, используя preg_match, но я не слишком уверен, какой шаблон я бы использовал для этого.Пример из сеанса чата и каждой новой строки, которую я хочу начать с отметки времени.Например:

8: 02 утра Чарли подключается к клиенту чата в 8:04. Агент Джеки говорит: «Привет, Чарли, чем я могу помочь тебе сегодня?» 8:06 Чарли говорит: «Яищу баланс счета. "

Выше приведен пример того, как одна строка текста возвращается мне.Тем не менее, я хочу быть в состоянии разбить его по отметке времени и быть в массиве, как показано ниже:

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.'"
)

Я искал в Google и здесь, но я не могу найти нужнуюформулировка для поиска того, что мне нужно.

Это данные, возвращаемые 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."
 )

Ответы [ 2 ]

4 голосов
/ 27 января 2012

preg_split с положительным прогнозом ((?=...)).

preg_split('/(?=[12]?[0-9]:[0-9]{2}[ap]m)/i',$string,0,PREG_SPLIT_NO_EMPTY);
0 голосов
/ 27 января 2012
$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);
...