2011-06-29 84 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);