0

我希望将文本字符串拆分为由空格分隔的单词。我用

$words=explode(" ", $text);

不幸的是,这种方法对我来说效果不佳,因为我想知道两者之间有多少空格。

有没有比逐个符号地遍历整个 $text,使用while语句用整数(空格数,在大多数情况下为 1)填充 $spaces ( $spaces=array();) 并将文本读入 $words=更好的方法array() 一个符号一个符号?

这是一个额外的解释。

$text="Hello_world_____123"; //symbol "_" actually means a space

需要:

$words=("Hello","world","123");
$spaces=(1,5);
4

3 回答 3

2

改用正则表达式:

$words = preg_split('/\s+/', $text)

编辑

$spaces = array();
$results = preg_split('/[^\s]+/', $text);
foreach ($results as $result) {
  if (strlen($result) > 0) {
     $spaces [] = strlen($result);
  }
}
于 2012-04-17T18:21:49.650 回答
1

有很多方法可以做你想做的事情,但我可能会选择preg_split()array_map()的组合:

$text = 'Hello world     123';
$words = preg_split('/\s+/', $text, NULL, PREG_SPLIT_NO_EMPTY);
$spaces = array_map(function ($sp) {
    return strlen($sp);
}, preg_split('/\S+/', $text, NULL, PREG_SPLIT_NO_EMPTY));

var_dump($words, $spaces);

输出:

array(3) {
  [0]=>
  string(5) "Hello"
  [1]=>
  string(5) "world"
  [2]=>
  string(3) "123"
}
array(2) {
  [0]=>
  int(1)
  [1]=>
  int(5)
}
于 2012-04-17T18:36:37.827 回答
0

您仍然可以像这样获得中间的空格数:

$words = explode(" ", $text);
$spaces = sizeof($words)-1;

那不适合你吗?

于 2012-04-17T18:22:39.480 回答