我怎样才能把一篇课文分成一组句子?
示例文本:
给我煎海狸。给我炸河狸!给我炸海狸?
给我炸4号海狸?!给我炸很多海狸…终点
应输出:

0 => Fry me a Beaver.
1 => Fry me a Beaver!
2 => Fry me a Beaver?
3 => Fry me Beaver no. 4?!
4 => Fry me many Beavers...
5 => End

我尝试了一些我通过搜索找到的解决方案,但都失败了,尤其是在第四句。
/(?<=[!?.])./

/\.|\?|!/

/((?<=[a-z0-9)][.?!])|(?<=[a-z0-9][.?!]\"))(\s|\r\n)(?=\"?[A-Z])/

/(?<=[.!?]|[.!?][\'"])\s+/    // <- closest one

最佳答案

既然你想“分裂”句子,你为什么要匹配它们?
在这种情况下,我们使用preg_split()
代码:

$str = 'Fry me a Beaver. Fry me a Beaver! Fry me a Beaver? Fry me Beaver no. 4?! Fry me many Beavers... End';
$sentences = preg_split('/(?<=[.?!])\s+(?=[a-z])/i', $str);
print_r($sentences);

输出:
Array
(
    [0] => Fry me a Beaver.
    [1] => Fry me a Beaver!
    [2] => Fry me a Beaver?
    [3] => Fry me Beaver no. 4?!
    [4] => Fry me many Beavers...
    [5] => End
)

说明:
简单地说,我们是按分组空间进行拆分,并执行两项操作:
??=[a-z])积极的前瞻性断言,搜索空格后是否有字母,这是解决no. 4问题的一种方法。

07-25 23:01