0

どう説明したらいいのかわかりませんが、頑張ります。PHPでSoapClientを使用してAPIから読み取っているテキストの全行があります。データを取得すると、すべてのデータが1行に表示されます。preg_matchを使用してデータをフィルタリングし、配列にスローできるようにしたいのですが、どのパターンを使用するのかよくわかりません。例はチャットセッションからのものであり、タイムスタンプで開始したい各改行です。したがって、たとえば:

8:02AMチャーリーがチャットクライアントに接続します8:04AMエージェントジャッキーが「こんにちはチャーリー、今日はどうすればお手伝いできますか」と言います8:06AMチャーリーは「アカウントの残高を取得したいと思っています」と言います。

上記は、1行のテキストがどのように返送されるかの例です。ただし、タイムスタンプで分割して、次のような配列にできるようにしたいと思います。

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 に答える