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

T. *_*nes 13 php regex string

我想使用PHP方法preg_replace()和正则表达式在大写字母上为字符串添加空格,但我只想在第一个大写字母连续时添加空格.我也希望正则表达式知道连续的大写字母中的最后一个资本应该是以前放置空间的下一个资本.

这些字符串是示例:

TodayILiveInTheUSAWithSimon
USAToday
IAmSOOOBored

成为:

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

可以这样做,怎么做?

这个问题(正则表达式,用大写字母拆分字符串但忽略TLA)似乎用.net完成了这个.

工作解决方案

这是我使用的完整代码:

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

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

/(?<!^)((?<![[:upper:]])[[:upper:]]|[[:upper:]](?![[:upper:]]))/
/((?<=[a-z])(?=[A-Z])|(?=[A-Z][a-z]))/
Run Code Online (Sandbox Code Playgroud)

第一个是来自@ Regexident的解决方案,并且比第二个解决方案快得多.

Reg*_*ent 11

找:

(?<!^)((?<![[:upper:]])[[:upper:]]|[[:upper:]](?![[:upper:]]))
Run Code Online (Sandbox Code Playgroud)

更换:

 $1
Run Code Online (Sandbox Code Playgroud)

注意之前的空间 $1

编辑:修复.

  • 请看固定的答案.我忘了PHP需要围绕`:upper:`的双括号,我的坏.我的PHP有点尘土飞扬,不像我的正则表达式.:P (3认同)