preg_split - 新行

时间:2009-08-30 17:41:05

标签: php

我目前正在开发一个接收消息的脚本,每100个字符左右将其拆分,并发送每个部分。

但是,我原来的字符串中有“\ 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)消息的第一部分(“John Smith的消息”)甚至没有包含在数组中。

2)新行(\ n)似乎提前剪掉了字符串。

3)奇怪的是,对于消息的最后一行(“回复”等等),它会切断最后一个单词(“msg。”)并将其添加到一个新行中,无论句子是什么可能会读。

对此的任何帮助都会很棒!

2 个答案:

答案 0 :(得分:2)

您实际上正在尝试重新实现函数wordwrap()。我认为完成你需要的工作的电话会是这样的:

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

答案 1 :(得分:1)

  

我原来的字符串中有“\ n”行

使用PCRE_DOTALL修饰符允许“。”匹配换行符。

使用str_split可以更轻松地将字符串分块为固定长度字符串数组。正如soulmerge建议的那样,如果那是你真正想做的事情,那么wordwrap可能会更好。您可以使用explode将字符串拆分为数组。

避免使用字符串处理函数可用的正则表达式。 (而PHP有很多。)