2013-02-15 26 views
0

我目前使用如何在PHP中編輯句子間的空格?

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

編輯在PHP中的句子,但我在這裏有一個問題,就是一個例子:

這是我的示例文本。在這句話之後,點之後沒有空格。一些其他的句子。

我該怎麼辦?我希望PHP在這種情況下添加空格,但不是在已經有空格或以「...」結尾的句子之後。

另一個不需要的行爲是數字。例如:

在彩票上贏得1.000.000有多好!

我真的不希望它在edititng之後變成1. 000. 000

C.J.同樣的東西。它必須保持C.J.而不是C. J.

因此,在短期應該有空格時:

  • 「」 NOT後跟數(可以是其它符號)時,有一個以上的點像
  • 忽略「...」
  • 忽略當在點之前1個或2字母的單詞。
+0

什麼。 COM「?或者「你應該放棄。一個正則表達式不能可靠地處理它。他們吸取上下文敏感的東西。」? :P – cHao 2013-02-15 16:18:36

回答

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

在這裏看到它在行動:http://regex101.com/r/zE4pI4


如果要考慮到縮寫在你的文字(see here how it fails)的開頭這樣可以得到更加複雜。因爲回顧後必須固定長度,你必須創建一個單獨的回顧後爲:

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

看到它在這裏的行動:http://regex101.com/r/pH1mZ5

關於「Dr.Whoever」和「任何
+0

任何想法如何做到這一點?並保持一切連接... – 2013-02-15 16:00:46

+0

@ M.V。 - 它適用於我:http://codepad.viper-7.com/kBcBOA – 2013-02-15 16:00:52

+0

對不起耶...我刪除了評論,因爲我expresion更改之間... – 2013-02-15 16:01:54