【问题标题】:Splitting paragraph into sentences keeping the punctuations - not a dup将段落拆分为保留标点符号的句子 - 不是重复
【发布时间】:2018-10-11 08:33:30
【问题描述】:

在这里我们再次使用带有PHP preg_split() 函数的正则表达式卡住了。

代码如下:

preg_split('~("[^"]*")|[!?.।]+\s*|\R+~u', $paragraph, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);

我正在尝试将段落拆分为句子。这段代码为我完成了这项工作。
这是我的previous question的链接

但是,现在我需要保持标点符号完整(问号、句号等)。

使用PREG_SPLIT_DELIM_CAPTURE 应该已经完成​​了这项工作,但不知何故它不是那样工作的。我只得到句子,没有句号或问号。

【问题讨论】:

  • 你能发一个测试用例吗?一个不工作的,和预期的结果。
  • ("[^"]*")|[!?.।]+\K\s*|\R+一样使用\K

标签: php regex preg-split


【解决方案1】:

您的要求不需要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?""
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 2013-05-21
    • 2019-04-07
    • 2013-01-15
    • 1970-01-01
    • 2011-01-10
    相关资源
    最近更新 更多