如何将句子分成单词和标点符号?

Luc*_*emy 4 php regex string preg-split text-segmentation

例如,我想拆分这句话:

I am a sentence.
Run Code Online (Sandbox Code Playgroud)

分成5个部分; I,am,a,sentence,和..

我目前正在preg_split尝试使用explode,但我似乎找不到合适的东西.

这就是我尝试过的:

$sentence = explode(" ", $sentence);
/*
returns array(4) {
  [0]=>
  string(1) "I"
  [1]=>
  string(2) "am"
  [2]=>
  string(1) "a"
  [3]=>
  string(8) "sentence."
}
*/
Run Code Online (Sandbox Code Playgroud)

而且这个:

$sentence = preg_split("/[.?!\s]/", $sentence);
/*
returns array(5) {
  [0]=>
  string(1) "I"
  [1]=>
  string(2) "am"
  [2]=>
  string(1) "a"
  [3]=>
  string(8) "sentence"
  [4]=>
  string(0) ""
}
*/
Run Code Online (Sandbox Code Playgroud)

如何才能做到这一点?

nic*_*ckb 5

您可以拆分字边界:

$sentence = preg_split("/(?<=\w)\b\s*/", 'I am a sentence.');
Run Code Online (Sandbox Code Playgroud)

几乎正则表达式扫描直到找到一个单词字符,然后在它之后,正则表达式必须捕获一个单词边界和一些可选空格.

输出:

array(5) {
  [0]=>
  string(1) "I"
  [1]=>
  string(2) "am"
  [2]=>
  string(1) "a"
  [3]=>
  string(8) "sentence"
  [4]=>
  string(1) "."
}
Run Code Online (Sandbox Code Playgroud)