【发布时间】:2016-06-14 12:06:11
【问题描述】:
我有一些字符串,例如:
cats, e.g. Barsik, are funny. And it is true. So,
我想得到结果:
cats, e.g. Barsik, are funny.
我的尝试:
mb_ereg_search_init($text, '((?!e\.g\.).)*\.[^\.]');
$match = mb_ereg_search_pos();
但它获得第二个点的位置(在单词“true”之后)。
如何得到想要的结果?
【问题讨论】:
-
您的标题具有误导性,因为您需要匹配表示句子结尾的第一个句号。这是一种幼稚的方法:
'~(?<!\be\.g)\.(?=\s+\p{Lu})~'(与preg_match一起使用)。但是,您可能需要某种 NLP 包。 -
@Wiktor Stribiżew,谢谢
-
还有其他缩写,这并不是在所有情况下都有效。
-
您可以通过
preg_match和(?:\b\w\.|[^.])+\.获得所需的输出。\b匹配单词边界,\w单词字符。怎么样Mr. Higgins... -
长篇大论但有效:https://3v4l.org/l3ibc