使用Preg_Split处理多个空格

4

我在解决这个问题时遇到了一些困难。

我有这样的数据行:

$data = "Alpha Natural Resources Inc COM 02076X102 2,077 45,700 x

我想要将这行数据“分裂”,使每个空格之间都成为一个元素。然而,我发现我只找到了能够基于一个或多个空格将其拆分的解决方案 - 我希望能够在有多个空格但不止一个空格的情况下将其拆分(例如,Alpha Natural Resources Inc 应该保持在一起)。

我知道可以使用 preg_split 解决,但是我无法找出正确的代码。

谢谢


更好的提问方式是说,您想查找每个实例中两个或更多的空格。 - Andre
@Andre 但是为什么呢?“more than one”和“two or more”完全是同一个意思。 - Peter Kionga-Kamau
5个回答

9

preg_split('/\s\s+/', $data)这个函数可以匹配任何空格的多个,比如回车、制表符等。而preg_split('/ +/', $data)只能匹配空格键产生的空白字符。\s可以选择任何空白字符。去除多余的空格


1
是的,我认为他实际上是指一个空格,而不是空白字符。顺便说一下,如果您想使用该解决方案,应该是\s\s+。 - deviousdodo

8

这个方法可以将数据按照多个空格、单个空格或者点击新标签页来分割。

preg_split('/\s+/', $data)


这是完全不正确的,因为从未编辑过的问题描述为“我想在有多个空格但不仅是一个空格的行上爆炸此行”。该模式在一个或多个空格上爆炸,因此“Alpha Natural Resources Inc”将无法“保持在一起”。 - mickmackusa

2
这是一篇旧文章,但为了完整性我决定添加内容。
$arr = preg_split('/[\s][\s]{1,3}/', $string,-1,PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);


这里有更多的选项可供使用。请记住,在括号内,您可以自定义要查找的确切空格数...
/[\s][\s]{1,4}/
或者只是在第一次匹配后一次或多次
/[\s][\s]+/
还要知道有标志与此设置,以使处理输出更加容易。
PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE
一个使其返回不为空的结果,另一个包含匹配的内容在返回的内容中。
还有其他的(http://php.net/preg-split),其中一个捕获偏移量但会稍微改变输出结构。
//////////////////// UPDATE ////////////////
最终我不得不使用
/(\w+\W+)/
//匹配单词并将其及空格一起返回。

由于某种原因,preg_split无法替换空格。
对我来说,这很奇怪,因为它曾经在某个时间点工作过,然后在一些编辑之后就不再工作了。回到它正常工作的时候,它在我的测试页面和我的实际页面上都能工作。开始添加编辑进行故障排除,然后就没有返回结果中的空格。所以这对我来说非常简单和好用。


1
在模式中使用方括号没有任何好处。只有一个元素的字符类是无意义的。直接写出该字符即可。 - mickmackusa
mickmackusa - 是的,我相信这是一种使用更少打字的替代方式。然而,当我测试时,它按照我所述的方式工作,并且对于我个人来说更容易理解。我决定使用这种结构是因为它出现在我找到的示例中。因此,我选择了它,希望能够使大多数其他人更容易理解。 - JSG

0
最简单的方法是使用代表空格的\s。如果只有当至少有两个(\s\s)时才有效,建议使用花括号表示法来实现。在花括号中不指定第二个参数就表示任何大于或等于2的值都可以。
preg_split('/\s{2,}/', $data);

为了测试这段代码,请尝试以下操作

$data = 'hello  here  is  a  test! Hello World';

$p = preg_split('/\s{2,}/', $data);

die(var_dump($p));

输出如下:

array(5) {
  [0]=>
  string(5) "hello"
  [1]=>
  string(4) "here"
  [2]=>
  string(2) "is"
  [3]=>
  string(1) "a"
  [4]=>
  string(17) "test! Hello World"
}

0

这应该可以工作:

preg_split('/  +/', $data)

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