2011-06-29 108 views
2

即時嘗試完成以下操作:preg_replace問題

搜索小寫字母后跟大寫字母。將其替換爲小寫字母,後跟''。 ',然後是大寫字母。

例如:

helloAre you there 

應該成爲:

hello. Are you there 
+0

我添加了一個例子,我的解決方案排除iPhone –

+0

感謝爲了這! –

+0

不客氣。當您找到滿意的解決方案時,請接受答案(綠色支票),並選擇投票給您提供幫助的解決方案。 –

回答

7
preg_replace('/([a-z])([A-Z])/', '$1. $2', $str); 
+0

不錯,謝謝。所以你如何做反向引用 –

+0

你會如何去做規則的例外?即時通訊使用這種打印元描述,但我更喜歡蘋果產品的exeption,「IP」不應該匹配:>(適用於iPhone,iPad和等) –

3

插入的點空間下部和大寫字母之間.

preg_replace('/(?<=[a-z])(?=[A-Z])/', '. ', $str); 

爲了防止iP,使用此:

preg_replace('/(?!iP)([a-z])(?=[A-Z])/', '$1. ', $str); 
+0

我試圖理解你的正則表達式是如何工作的,怎麼了在中間插入一個點。你能不能介意我是否可以請你與我分享解釋?謝謝! – Abhay

+0

順便說一句,我想知道如果preg_replace_all()是一個PHP函數? – Abhay

+0

@Abhay,它結束了匹配零寬度的表達。換句話說,它匹配一個位置,但沒有字符被替換。它發現的位置是小寫字母和大寫字母之間的位置。它使用原子回顧後'(?<=正則表達式)'和lookaheed'('=正則表達式)'斷言。 –

0

如果$text是原文,你可以使用

$text = preg_replace('/([a-z])([A-Z])/', '\1. \2', $text);