preg_split - New Line

2 Cevap

Şu anda ayrı her 100 karakter veya öyle böler, bir mesajı alır, ve her bir parçasını gönderir bir script geliştiriyorum.

Ancak, benim özgün dize içinde "\ n" satır, ve bu pre-olgun (örn., 100 karakterden önce) bölmek için neden benim preg_split bir soruna neden vardır.

İşte şu anda ile çalışıyorum ne:

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

Şimdi, bu, ben 3 şey fark ettik:

1) mesajı ("John Smith adlı Msg") olarak ilk bölümü bile diziye dahil almaz.

2) Yeni hatlar (\ n) erken dize kesmek gibi görünüyor.

Mesajın son satırındaki (son sözü ("msg.") Keser ve yeni bir satıra, ne olursa olsun cümle okumak olabilir ekler) .. vb "yanıtlamak için" ile, 3) İşin tuhafı.

Bu konuda herhangi bir yardım harika olurdu!

2 Cevap

Orijinal dize içinde "\ n" hatları vardır

Satırsonlarını maç için PCRE_DOTALL değiştirici izin '.' Kullanın.

Sabit uzunluklu dizeler bir diziye bir dize Chunking daha kolay kullanılarak yapılabilir str_split. Soulmerge anlaşılacağı gibi gerçekten yapmak için çalışıyoruz buysa, wordwrap muhtemelen daha iyidir. Sen explode daha sonra bir dizi için dışarı bir dize bölmek için kullanabilirsiniz.

Dize işleme fonksiyonları mevcuttur nerede regex başvurmadan kaçının. (Ve PHP bir yeri vardır.)