PHP和Preg_拆分

PHP和Preg_拆分,php,regex,Php,Regex,我使用preg_split regex将句子分割成数组。我能够成功地做到这一点。然而,我告诉preg_replace找到的部分模式是文本本身的一部分。因此,部分文本也被删除。有没有办法将阵列重新插入阵列?例如,如果我告诉preg_spit搜索句点和其后的大写字母,它将从数组中删除大写字母,这是我不想要的 代码如下: $line = preg_split("@[\.\?\!\:][\W]+[A-Z]@" 示例字符串: 这是第一句。这是第二句吗?这是第三句!这是第四句:这是第五句。 这是第六句,这

我使用preg_split regex将句子分割成数组。我能够成功地做到这一点。然而,我告诉preg_replace找到的部分模式是文本本身的一部分。因此,部分文本也被删除。有没有办法将阵列重新插入阵列?例如,如果我告诉preg_spit搜索句点和其后的大写字母,它将从数组中删除大写字母,这是我不想要的

代码如下:

$line = preg_split("@[\.\?\!\:][\W]+[A-Z]@"
示例字符串:

这是第一句。这是第二句吗?这是第三句!这是第四句:这是第五句。 这是第六句,这也是美国的第六句。国防部长查克·哈格尔附和克里的话,当弗吉尼亚州民主党众议员格瑞·康诺利问及在美国不采取行动的情况下,叙利亚再次发生化学袭击的可能性时,他说“非常高”

有办法解决这个问题吗


感谢您使用积极的前瞻性,这应该会起作用

$line = preg_split("[\.\?\!\:][\W]+(?=[A-Z])");
“(?=”和“)”之间的任何内容都匹配,但不包括在结果中。在最后一个括号后添加适当的重复运算符


搜索“regex look arounds、lookaheads、look behinds、assertions”将产生大量关于如何正确使用这些功能的信息:-)

请将您正在使用的代码添加到您的问题中请编辑您当前用于将句子拆分为问题的代码。我认为您指的是“积极前瞻”你有一个示例字符串吗?看看。它应该可以很好地工作,但您需要将:
U.S.
Rep.
添加到非句尾特殊情况列表中(如
Dr.
Mr.
Mrs.
等),并将
添加到句子终止符列表中(
[!?]
)。然而,当我加上这句话>>时,国防部长查克·哈格尔附和克里的话,当弗吉尼亚州民主党众议员格瑞·康诺利问及在美国不采取行动的情况下,叙利亚再次发生化学袭击的可能性时,他说“非常高”。对不起,一开始我没有仔细阅读。这是一个相当特殊的情况,如果您知道经常使用此缩写,您可以对“Rep”进行反向查找……$line=preg\u split((?!Rep)[\.\.\?\!\:][\W]+(?=[a-Z]);嗨,谢谢你的回复。问题是我事先不知道这个词是什么。有时是“代表”,有时是别的。我只知道单词的开头是大写字母,我相信(如果这有帮助的话)。是的,我理解,试图让你的正则表达式100%正确是非常困难和令人沮丧的,但这永远不会发生lol。特别是在处理自然语言时,有无限的可能性。当你注意到像这样的特殊情况时,你所能做的就是不断调整它。例如,如果你知道内容总是关于政治的,你可以解释通常缩写的常见政治术语,而不是解释曾经存在的所有可能的缩写。以大写字母开头的单词太宽了。。。