0

我目前正在使用

$text= preg_replace('/(?<=[a-zA-Z])[.](?![\s$])/','. ',$text);

要在 PHP 中编辑句子,但我有一个问题,这里有一个例子:

这是我的示例文本。在这句话之后,点后面没有空格。还有一些其他的句子。

我该怎么办?我希望 PHP 在这种情况下添加空格,但不是在已经有空格或以“...”结尾的句子之后

另一个不受欢迎的行为是数字。例如 :

在彩票中赢得 1.000.000 是多么棒的事!

我真的不希望它1. 000. 000在编辑后变成。

也一样C.J.。它必须留下C.J.而不是C. J.

所以简而言之,在以下情况下应该有空格:

  • “。” 跟数字(可以是其他符号)
  • 当有多个点如“...”时忽略
  • 当点前有 1 或 2 个字母时忽略。
4

1 回答 1

2
$text = preg_replace('/(?<! [a-z]| [a-z]{2})\.(?! |\d|\.)/i', '. ', $text);

在这里查看它的实际操作:http ://regex101.com/r/zE4pI4


如果您想考虑文本开头的首字母缩写,这可能会变得更加复杂(请参阅此处它是如何失败的)。由于后视必须是固定长度,因此您必须为此创建一个单独的后视:

/(?<! [a-z]| [a-z]{2})(?<!\b[a-z]|\b[a-z]{2})\.(?! |\d|\.)/

在此处查看实际操作:http ://regex101.com/r/pH1mZ5

于 2013-02-15T15:52:07.923 回答