为此,我尝试了以下操作:
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
这是做上面的工作,但是没有保留换行符,所有内容都存储在一行中,所以当从空格和换行符中爆炸字符串时,我应该如何保留换行符
答案 0 :(得分:1)
答案 1 :(得分:0)
尝试使用以下正则表达式爆炸:
[ ]+|(?=\n)
这将分割成任意数量的空格,或者如果看到该行的末尾。如果看到行尾,它将分割但不消耗行尾标记。
$string='text_pressing_enter_without_space
#secondline';
$string=preg_split('/[ ]+|(?=\n)/',$string);
print_r($string);
答案 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
中