2009-08-30 86 views
0

我目前正在開發一個腳本,需要一個消息,將其分解除了每100個字符左右,並將各部分。使preg_split - 新線

然而,我的原始字符串中有「\ n」個線路,並且這引起問題,我的使preg_split,使它分裂過早地(例如,前100個字符)。

這裏的我目前的工作是什麼:現在

$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>"; 
    } 

,這一點,我已經注意到了三兩件事:

1)消息(「消息來自約翰史密斯」的第一部分)甚至不包含在數組中。

2)新線(\ n)的似乎早些的字符串。 3)奇怪的是,用消息的最後一行(「回覆」等等),它切斷了最後一個單詞(「msg。」),並將其添加到一個新行中,不管是什麼句子可能讀取。

任何幫助,這將是偉大的!

+0

感謝您的回覆,但是,我需要每個「部分」都是數組的單獨部分,以便我可以分別發送每個「100」字符串。使用wordwrap,它仍然是一個字符串。我怎樣才能把它分成幾個字符串? – Dodinas 2009-08-30 19:07:47

回答

2

你實際上是試圖重新實現的功能wordwrap()。我想,做你需要看起來像這樣的工作電話:

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

看看我上面的評論。 – Dodinas 2009-08-30 19:15:39

+0

你是對的,忘記它會返回一個字符串。但將其轉換爲數組很容易。你的函數是'explode()':http://us2.php.net/manual/en/function.explode.php – soulmerge 2009-08-31 07:24:07

1

我原來的字符串中有「\ n」,在這行

使用PCRE_DOTALL修改,以允許「」以匹配換行符。

分塊一個字符串轉換爲固定長度字符串數組可以更容易地使用str_split來完成。正如soulmerge所暗示的那樣,如果這就是你真正想要做的,wordwrap可能會更好。之後,您可以使用explode將字符串拆分爲數組。

避免訴諸正則表達式,其中字符串處理函數可用。 (而PHP有很多。)