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

上面的代碼將輸出以下內容:空白分隔符分割

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

但是據我所知,PREG_SPLIT_DELIM_CAPTURE標誌應被捕獲空格分隔符在數組中。我錯過了什麼嗎?

編輯:好的,在重讀了我現在理解的文檔後,PREG_SPLIT_DELIM_CAPTURE並不適用於這種情況。我需要的輸出會是這樣的:

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

誰告訴你的? –

+0

我的意思是如果情況並非如此,那麼還有不同的方法嗎? – user2827048

+0

根據php [manual](http://php.net/manual/en/function.preg-split.php),'PREG_SPLIT_DELIM_CAPTURE'會導致模式的任何加括號的部分也被返回。你想要的輸出是什麼? –

回答

0

所以,如果你PREG_SPLIT_DELIM_CAPTURE閱讀說明書再一次它說:

如果設置了這個標誌,定界符模式中的括號表達式也會被捕獲並返回以及。

你會突然明白,expression in the delimiter pattern(在你的情況下,它是\s)將是captured(即加入到結果),只有當它在parentheses。現在,您可以:

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

我只是想出了你的答案,哈哈。謝謝! – user2827048

+0

是的,我也是))) –