我想使用像preg_replace()
这样的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的解决方案,比第二个解决方案快得多。
答案 0 :(得分:11)
查找
(?<!^)((?<![[:upper:]])[[:upper:]]|[[:upper:]](?![[:upper:]]))
替换:
$1
注意$1
编辑:修复。