如何在PHP中将段落更改为数组,包括空格和标点符号

时间:2013-12-24 18:56:45

标签: php arrays paragraph preg-split text-segmentation

我有一个像Hello? My name is Ben! @ My age is 32.

这样的字符串

我想将其更改为一个数组,其中所有单词,空格和标点符号作为数组中的单独实体。例如,如果我做var_dump($sentence),则数组应如下所示:

array(12) {
  [0]=>
  string(5) "Hello"
  [1]=>
  string(1) "?"
  [2]=>
  string(1) " "
  [3]=>
  string(2) "My"  
  [4]=>
  string(1) " "
  [5]=>
  string(4) "name"
  [6]=>
  string(1) " "  
  [7]=>
  string(2) "is"
  [8]=>   
  string(1) " "  
  [9]=>
  string(3) "Ben"
  [10]=>
  string(1) "!" 
  [11]=>
  string(1) " " 
  [12]=>
  string(1) "@" 
等等......

我发现的唯一与此相近的代码是:

$sentence = preg_split("/(?<=\w)\b\s*/", 'Hello? My name is Ben! @ My age is 32.');

echo '<pre>';
var_dump($sentence);
echo '</pre>';

输出:

array(10) {
[0]=>
string(5) "Hello"
[1]=>
string(4) ". My"
[2]=>
string(4) "name"
[3]=>
string(2) "is"
[4]=>
string(3) "Ben"
[5]=>
string(6) "! @ My"
[6]=>
string(3) "age"
[7]=>
string(2) "is"
[8]=>
string(2) "32"
[9]=>
string(1) "."
}

如何更改此项以便空格和标点符号在数组中分开?

1 个答案:

答案 0 :(得分:3)

无需前瞻:只需制作preg_split捕获分隔符(使用PREG_SPLIT_DELIM_CAPTURE选项):

$str = 'Hello? My name is Ben! @ My age is 32.';
$arr = preg_split('/(\W)/', $str, null, 
  PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);

Demo。通过此设置,每个\W(非单词)符号被单独捕获(作为分隔符),但所有\w符号都被收集到序列中(作为字符串的一部分由\W分隔)。