2009-08-30 12 views
0

私は現在、メッセージを受け取り、100文字程度に分割して各部分を送信するスクリプトを開発しています。preg_split - 新しい行

しかし、私の元の文字列には "\ n"という行があり、これはpreg_splitに問題を引き起こしています。これは、あらかじめ成熟した(たとえば100文字前に)分割されています。

1)メッセージ(「ジョン・スミスからメッセージ」の最初の部分:これで、私は3つの事を気づいた、今

$sMessage = "Msg from John Smith \n". 
      "SUBJ: Hello! \n". 
      "This is the bulk of the message and can be well over 200 or 300 characters long. \n". 
      "To reply, type R 131, then ur msg."; 


$split = preg_split('/(.{0,100})\s/', 
       $sMessage, 
       0, 
       PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); 
    array_shift($split); 

    $count = count($split); 
    foreach ($split as $key => $message) { 
    $part = sprintf("(%d/%d) %s", $key+1, $count, $message); 
    echo $part; 
    echo "<br>"; 
    } 

:ここ

は、私が現在働いているものです)も配列に含まれません。

2)新しい行(\ n)は文字列を早く切断するようです。

3)奇妙なことに、メッセージの最後の行(「To reply」など)で、最後の単語(「msg。」)を切り捨て、それを新しい行に追加します。文章を読むことがあります。

これについての助けがあれば助かります!

+0

しかし、私は各 "100"文字列を別々に送ることができるように、各パーツを配列の別々の部分にする必要があります。ワードラップを使用すると、それはまだすべて1つの文字列です。どのように複数の文字列に分けることができますか? – Dodinas

答えて

2

実際にはwordwrap()関数を再実装しようとしています。

$array = explode("\n", wordwrap($string, 100, "\n", true)); 
+0

上記のコメントをご覧ください。 – Dodinas

+0

正しいですが、文字列を返すのを忘れてしまいました。しかし、それを配列に変換するのは簡単です。 Thie関数は 'explode()'です:http://us2.php.net/manual/en/function.explode.php – soulmerge

1

私の元の文字列が、それには「\ n」はラインを持っている

できるようにPCRE_DOTALL修飾子を使用します。私はあなたがこのようになります。必要な仕事をして、コールが思います「」改行に合わせる

str_splitを使用すると、文字列を固定長文字列にチャンクすることがより簡単にできます。 soulmergeが示唆するように、あなたが本当にやろうとしているのであれば、ワードラップはおそらくより良いでしょう。後でexplodeを使用して文字列を配列に分割することができます。

文字列処理関数が利用できるregexに頼らないでください。 (そしてPHPには多くのものがあります)

関連する問題