按空格分割字符串

3

我可以如何通过空格来分割一个字符串,无论这个空格有多长?

例如,从以下字符串中:

"the    quick brown   fox        jumps   over  the lazy   dog"

我会获取一个数组。
['the', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dog'];

1
这里有很多相同的问题。你试过搜索吗? - Asad Saeeduddin
@PlantTheIdea 这并没有处理长度超过一个字符的空格。 - Asad Saeeduddin
使用JavaScript的trim可以获得更可靠的结果... - Jack
1
在 PHP 的问题上说“使用 JavaScript”是毫无意义的。PHP 用于制作后端,JavaScript 用于前端。如果我在 Postman(或任何其他用户可以干扰的前端)中进行 API 调用,则不涉及 JavaScript,但我仍希望 API 正确响应。 - Skrrp
2个回答

11
你可以使用正则表达式来轻松地实现这一点:
$string = 'the quick     brown fox      jumps 



over the 

lazy dog';


$words = preg_split('/\s+/', $string, -1, PREG_SPLIT_NO_EMPTY);

print_r($words);

这会产生以下输出:

Array
(
    [0] => the
    [1] => quick
    [2] => brown
    [3] => fox
    [4] => jumps
    [5] => over
    [6] => the
    [7] => lazy
    [8] => dog
)

-1和PREG_SPLIT_NO_EMPTY是用来做什么的? - gramme.ninja
@gramme.ninja 那些是限制和标记。请查看该函数的文档:http://www.php.net/manual/zh/function.preg-split.php - vvanasten
2
-1 表示没有限制。如果您在那里指定一个正数,那么它只会匹配那么多次。比如我把它设置为3,它将返回 [0] => the, [1] => quick, [2] => brown fox jumps over...PREG_SPLIT_NO_EMPTY 意味着它不会返回空字符串。例如,如果您使用 \s 而不是 \s+,那么它会将所有空格分解为单独的实体,并返回一堆空字符串和您想要的文本。PREG_SPLIT_NO_EMPTY 只是告诉它忽略空项并给我们想要的东西。 - Quixrick
PREG_SPLIT_NO_EMPTY 用于处理字符串开头或末尾存在空格的情况。-1 是默认值,只有在需要设置第四个参数时才需要。 - Den

2

使用正则表达式:

$str = "the      quick brown fox jumps over the lazy dog";
$a = preg_split("~\s+~",$str);
print_r($a);

请注意:我修改了您的字符串,增加了第一个单词和第二个单词之间的大量空格,因为这是您想要的。
输出结果:
Array ( [0] => the [1] => quick [2] => brown [3] => fox [4] => jumps [5] => over [6] => the [7] => lazy [8] => dog ) 
工作原理: \s+ 表示一个或多个空格字符。它是分割字符串的分隔符。请注意,PCRE 所谓的“空格字符”不仅仅是通过按空格键得到的字符,还包括制表符、垂直制表符、回车和换行符。这对您的目的来说应该完全有效。 参考资料:
  1. 如需进一步阅读,您可以查看这些preg_split 示例
  2. preg_split 手册页面

\s+ 表示一个或多个空格、制表符、换行符、回车符、换页符。 - Dejan Marjanović

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接