2017-02-03 194 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

是的,我也是))) –