php - 将段落拆分为保留标点符号的句子 - 不是重复
问题描述
PHP
preg_split()
在这里,我们再次使用带有函数的正则表达式卡住了。
这是代码:
preg_split('~("[^"]*")|[!?.।]+\s*|\R+~u', $paragraph, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
我正在尝试将段落拆分为句子。这段代码为我完成了这项工作。
这是我上一个问题的链接
但是,现在我需要保持标点符号完整(问号、句号等)。
使用PREG_SPLIT_DELIM_CAPTURE
应该已经完成了这项工作,但不知何故它不是那样工作的。我只得到句子,没有句号或问号。
解决方案
您的要求不需要PREG_SPLIT_DELIM_CAPTURE
. 当您需要将它们作为单独的匹配返回时,它会很有帮助。在这种情况下,您需要\K
:
<?php
var_dump(preg_split('~("[^"]*")|[!?.।]+\K\s*|\R+~u', <<<STR
hello! how are you? how is life
live life, live free. "isnt it?"
STR
, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY));
输出:
array(5) {
[0]=>
string(6) "hello!"
[1]=>
string(12) "how are you?"
[2]=>
string(11) "how is life"
[3]=>
string(21) "live life, live free."
[4]=>
string(10) ""isnt it?""
}
推荐阅读
- amazon-dynamodb - 固定分区键是不好的做法吗?
- nlp - Google 引擎是否会惩罚包含(机器或人工)翻译内容的页面?
- ios - 单元测试 ReactiveCocoa SignalProducer 不断返回中断
- javascript - 使用了一些,但还是需要用到数组的索引
- linux - 需要代理到动态端口
- c# - 路易斯在两种意图之间做出选择
- apache-storm - 使用 Flink 或 Storm 和 Ignite 的物联网用例
- docker - 在 docker-compose up 之前重新编译 VueJS 应用程序
- c# - 从另一个类添加和删除 ObservableCollection
- git - 此目录似乎不是 git 存储库