2017-02-03 4 views
-1
gefangen zu werden
<?php 
    $text = "Testing text splitting\nWith a newline!"; 
    $textArray = preg_split('/\s+/', $text, 0, PREG_SPLIT_DELIM_CAPTURE); 
    print_r($textArray); 

Der obige Code wird ausgegeben folgendes:Leerzeichen Trennzeichen nicht in Preg geteilt

Array 
(
    [0] => Testing 
    [1] => text 
    [2] => splitting 
    [3] => With 
    [4] => a 
    [5] => newline! 
) 

aber meines Wissens sollte die PREG_SPLIT_DELIM_CAPTURE Flagge die Leerzeichen Trennzeichen in dem Array erfassen werden. Fehle ich etwas?

edit: Ok, nach dem erneuten Lesen der Dokumentation verstehe ich jetzt, dass PREG_SPLIT_DELIM_CAPTURE nicht für diesen Fall gedacht ist. Meine gewünschte Ausgabe wäre so etwas wie:

Array 
(
    [0] => Testing 
    [1] => ' ' 
    [2] => text 
    [3] => ' ' 
    [4] => splitting 
    [5] => '\n' 
    [6] => With 
    [7] => ' ' 
    [8] => a 
    [9] => ' ' 
    [10] => newline! 
) 
+0

Wer hat Ihnen das gesagt? –

+0

Ich meine, wenn das nicht der Fall ist, gibt es dann einen anderen Weg? – user2827048

+0

Gemäß dem php [Handbuch] (http://php.net/manual/en/function.preg-split.php) bewirkt 'PREG_SPLIT_DELIM_CAPTURE', dass alle in Klammern gesetzten Teile des Musters ebenfalls zurückgegeben werden. Was ist Ihre gewünschte Ausgabe? –

Antwort

0

Also, wenn Sie Handbuch für PREG_SPLIT_DELIM_CAPTURE noch einmal lesen, das sagt:

Wenn dieser Flag gesetzt ist, klammern Ausdrücke des Begrenzungsmuster aufgenommen werden und zurück auch.

Sie plötzlich verstehen, dass expression in the delimiter pattern (in Ihrem Fall es \s ist) captured sein wird (das heißt hinzugefügt Folge) nur dann, wenn es in parentheses ist. Jetzt können Sie:

$text = "Testing text splitting\nWith a newline!"; 
$textArray = preg_split('/(\s+)/', $text, 0, PREG_SPLIT_DELIM_CAPTURE); 
         // parentheses! 
print_r($textArray); 
+0

Ich habe das gerade herausgefunden, als du geantwortet hast, haha. Vielen Dank! – user2827048

+0

Ja, ich auch))) –

Verwandte Themen