PHP在空格和换行符上爆炸字符串,但保留了换行符

时间:2018-07-25 06:03:20

标签: php regex

为此,我尝试了以下操作:

explode(" ",$string);

示例

text_pressing_enter_without_space
#secondline

但爆炸显示

Array [0] text_pressing_enter_without_space #secondline

所以我尝试了空格和换行符

preg_split('/[\s]+/',$string)

示例

$string='text_pressing_enter_without_space
#secondline';
$string=preg_split('/[\s]+/',$string);
print_r($string);
/*$final='';
foreach ($string as $g){
$final.=' '.$g; //checking something
}*/

输出

Array[0]=> text_pressing_enter_without_space Array[1]=> #secondline

这是做上面的工作,但是没有保留换行符,所有内容都存储在一行中,所以当从空格和换行符中爆炸字符串时,我应该如何保留换行符

3 个答案:

答案 0 :(得分:1)

使用:

$string=preg_split('/[ ]+|\n/',$string);

它将空格分隔开,并保留所有换行符

SqlBulkCopy help page

答案 1 :(得分:0)

尝试使用以下正则表达式爆炸:

[ ]+|(?=\n)

这将分割成任意数量的空格,或者如果看到该行的末尾。如果看到行尾,它将分割但不消耗行尾标记。

$string='text_pressing_enter_without_space
#secondline';
$string=preg_split('/[ ]+|(?=\n)/',$string);
print_r($string);

Demo

答案 2 :(得分:0)

您还可以通过以下方式构建自己的自定义解析器:

function spaceBreak($str,$preserveEmptyCells=false){
    if(!is_string($str)) return [];
    $result=[];
    $chunk='';
    for($i=0,$strlen=strlen($str);$i<$strlen;$i++){
        $chunk.=$str[$i];
        if(ctype_space($str[$i])){
            if($preserveEmptyCells==false){
                if(!ctype_space($chunk)){
                    $result[]=ord($str[$i])==13||ord($str[$i])==10?$chunk:trim($chunk);
                }
            }
            else{
                $result[]=ord($str[$i])==13||ord($str[$i])==10?$chunk:trim($chunk);
            }
            $chunk='';
        }

    }
    return $result;
}

echo '<pre>';
var_dump(spaceBreak("
 you\n can test it as 
 you
 want

 all the space will always been preserved

"));
echo '<pre>';

这将打印到屏幕上

array(14) {
  [0]=>
  string(4) "you
"
  [1]=>
  string(3) "can"
  [2]=>
  string(4) "test"
  [3]=>
  string(2) "it"
  [4]=>
  string(2) "as"
  [5]=>
  string(4) "you
"
  [6]=>
  string(5) "want
"
  [7]=>
  string(3) "all"
  [8]=>
  string(3) "the"
  [9]=>
  string(5) "space"
  [10]=>
  string(4) "will"
  [11]=>
  string(6) "always"
  [12]=>
  string(4) "been"
  [13]=>
  string(10) "preserved
"
}

您可能会看到保留了所有换行符,但没有保留空格。但是您也可以保留它们,只需修改所有行即可:

$result[]=ord($str[$i])==13||ord($str[$i])==10?$chunk:trim($chunk);

作者

$result[]=$chunk;

在功能spaceBreak