preg_split - Новая Линия - PullRequest
       10

preg_split - Новая Линия

0 голосов
/ 30 августа 2009

В настоящее время я разрабатываю скрипт, который принимает сообщение, разделяет его на каждые 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>";
  }

Теперь, с этим, я заметил 3 вещи:

1) Первая часть сообщения («Сообщение от Джона Смита») даже не включается в массив.

2) Кажется, что новые строки (\ n) обрезают строку раньше.

3) Как ни странно, в последней строке сообщения («Ответить» и т. Д.) Оно обрезает последнее слово («сообщение») и добавляет его в новую строку, независимо от того, какое предложение может читать.

Любая помощь в этом была бы великолепна!

Ответы [ 2 ]

2 голосов
/ 30 августа 2009

Вы на самом деле пытаетесь переопределить функцию wordwrap(). Я думаю, что вызов, который делает нужную вам работу, будет выглядеть так:

$array = explode("\n", wordwrap($string, 100, "\n", true));
1 голос
/ 31 августа 2009

в моей исходной строке есть строки "\ n"

Используйте модификатор PCRE_DOTALL , чтобы разрешить символу "." Совпадать с новыми строками.

Разбить строку на массив строк фиксированной длины проще всего с помощью str_split . Как предполагает soulmerge, перенос слов лучше, если вы действительно пытаетесь это сделать. Вы можете использовать explode , чтобы потом разбить строку на массив.

Избегайте использования регулярных выражений, если доступны функции обработки строк. (А у PHP много.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...