如何在大写字母的字符串中添加空格,但是使用PHP和正则表达式将连续的大写保持在一起?

问题描述:

我想用一个像preg_replace()这样的PHP方法和一个正则表达式来为大写字母的字符串添加空格,但我只想在第一个大写字母连续时添加一个空格。我也希望这个正则表达式能够知道,连续的一系列首都中的最后一个资本应该是之前放置空间的下一个资本。如何在大写字母的字符串中添加空格,但是使用PHP和正则表达式将连续的大写保持在一起?

这些字符串的例子:

 
TodayILiveInTheUSAWithSimon 
USAToday 
IAmSOOOBored 

成为:

 
Today I Live In The USA With Simon 
USA Today 
I Am SOOO Bored 

可以这样做,以及如何?

这个问题(Regular expression, split string by capital letter but ignore TLA)似乎用.net来实现。

工作液

这里是我使用的完整代码:

$string = 'TodayILiveInTheUSAWithSimon'; 
$regex = '/(?<!^)((?<![[:upper:]])[[:upper:]]|[[:upper:]](?![[:upper:]]))/'; 
$string = preg_replace($regex, ' $1', $string); 

这两个正则表达式的工作:

/(?<!^)((?<![[:upper:]])[[:upper:]]|[[:upper:]](?![[:upper:]]))/ 
/((?<=[a-z])(?=[A-Z])|(?=[A-Z][a-z]))/ 

第一个是从@ Regexident的解决方案下面,并且比第二个快得多。

查找:

(?<!^)((?<![[:upper:]])[[:upper:]]|[[:upper:]](?![[:upper:]])) 

替换:

$1 

音符之前$1

编辑的空间:修复。

+0

我应该用什么PHP方法来完成这个正则表达式? – 2011-12-23 02:30:39

+0

@ T.BrianJones:这将是[preg_replace](http://php.net/manual/en/function.preg-replace.php)。 – Regexident 2011-12-23 02:35:45

+0

我收到以下错误:'preg_replace():编译失败:当我执行此操作时,POSIX命名类仅在偏移量为4的类中受支持:'echo preg_replace('((? 2011-12-23 02:40:33