0

我正在使用 preg_split 正则表达式将句子拆分为数组。我能够成功地做到这一点。但是,我告诉 preg_replace 查找的部分模式是文本本身的一部分。因此,部分文本也被删除。有没有办法将模式重新插入数组?例如,如果我告诉 preg_spit 在此之后搜索句点和大写字母,它将从数组中删除我不想要的大写字母。

这是代码:

$line = preg_split("@[\.\?\!\:][\W]+[A-Z]@"

示例字符串:

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

有没有解决的办法?

谢谢

4

1 回答 1

2

使用积极的前瞻这应该可行....

$line = preg_split("[\.\?\!\:][\W]+(?=[A-Z])");

“(?=”和“)”之间的任何内容都匹配但不包含在结果中。在最后一个括号后添加适当的重复运算符。

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

于 2013-09-04T22:24:58.290 回答