【发布时间】:2013-04-28 22:48:57
【问题描述】:
如何将文本拆分成句子数组?
示例文本:
给我炒一只海狸。炒我一只海狸!炒我一只海狸? 炒我海狸没有。 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
我尝试了一些通过搜索在 SO 上找到的解决方案,但都失败了,尤其是在第 4 句。
/(?<=[!?.])./
/\.|\?|!/
/((?<=[a-z0-9)][.?!])|(?<=[a-z0-9][.?!]\"))(\s|\r\n)(?=\"?[A-Z])/
/(?<=[.!?]|[.!?][\'"])\s+/ // <- closest one
【问题讨论】:
-
第 4 句不遵循标准语法。您需要一类
Terminators- 标记句子结尾的标记。如果您使用其中一个终止符作为常规符号,那么它要么不是终止符,要么是您误写了句子。简而言之,你不能一边吃蛋糕一边吃。 -
我一直在做蛋糕吃:P 正则表达式可以像 2 个字符一样向前看,如果第 2 个字符不是大写 A-Z,则表示之前的标点符号无效
-
听起来你已经知道需要做什么了。
-
但是我如何将它放入正则表达式?
-
@thelolcat 你最好用你自己的解析器..一个单一的正则表达式是不行的!你必须考虑包含
Mr.thelolcat、no.1的句子
标签: php regex string preg-split