2009-08-30 4 views
0

Je suis en train de développer un script qui prend un message, le scinde tous les 100 caractères, et envoie chaque partie.preg_split - New Line

Cependant, ma chaîne d'origine contient des lignes "\ n", ce qui cause un problème avec mon preg_split, provoquant sa division prématurée (par exemple, avant 100 caractères).

Voici ce que je travaille actuellement avec:

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

Maintenant, avec cela, je l'ai remarqué 3 choses:

1) La première partie du message ("Message de John Smith") n'est même pas inclus dans le tableau.

2) Les nouvelles lignes (\ n) semblent couper la chaîne au début.

3) Curieusement, avec la dernière ligne du message ("Répondre" etc ...) il coupe le dernier mot ("msg.") Et l'ajoute dans une nouvelle ligne, peu importe ce que le phrase peut lire.

Toute aide sur ce serait génial!

+0

Merci pour la réponse, cependant, j'ai besoin de chaque "partie" pour être des parties séparées d'un tableau, de sorte que je puisse envoyer chaque chaîne de caractères "100" séparément. En utilisant wordwrap, c'est toujours une seule chaîne. Comment puis-je le séparer en plusieurs chaînes? – Dodinas

Répondre

2

Vous essayez actuellement de réimplémenter la fonction wordwrap(). Je pense que l'appel qui fait le travail dont vous avez besoin ressemblerait à ceci:

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

Consultez mon commentaire ci-dessus. – Dodinas

+0

Vous avez raison, oublié qu'il renvoie une chaîne. Mais convertir cela en tableau est facile. Cette fonction est 'explode()': http://us2.php.net/manual/fr/function.explode.php – soulmerge

1

ma chaîne d'origine a des lignes « \ n » dans ce

Utilisez le modificateur PCRE_DOTALL pour permettre « » pour faire correspondre les nouvelles lignes.

Le regroupement d'une chaîne en une série de chaînes de longueur fixe peut être plus facilement effectué à l'aide de str_split. Comme Soulmerge le suggère, Wordwrap est probablement mieux si c'est ce que vous essayez vraiment de faire. Vous pouvez utiliser explode pour diviser une chaîne en un tableau par la suite.

Évitez de recourir à regex lorsque des fonctions de traitement de chaîne sont disponibles. (Et PHP a beaucoup.)

Questions connexes