将段落分成句子并保留标点符号 - 不是重复[重复]

问题描述 投票:0回答:1

这里有一点我再次陷入使用正则表达式和

PHP
preg_split()
函数的困境。

这是代码:

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

我正在尝试将段落分成句子。这段代码适合我。
这是我的上一个问题

的链接

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

使用

PREG_SPLIT_DELIM_CAPTURE
应该可以完成这项工作,但不知怎的,它并没有那样工作。我只得到句子,没有句号或问号。

php regex preg-split
1个回答
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?""
}
© www.soinside.com 2019 - 2024. All rights reserved.