【发布时间】:2012-01-26 13:14:15
【问题描述】:
我想使用像preg_replace() 和正则表达式这样的PHP 方法在大写字母的字符串上添加一个空格,但我只想在它们连续时在第一个大写字母上添加一个空格。我还希望正则表达式知道连续大写字母串中的最后一个大写字母应该是之前放置空格的下一个大写字母。
这些字符串是示例:
TodayILLiveInTheUSAWithSimon 今日美国 我很无聊变成:
今天我和西蒙住在美国 今日美国 我很无聊这可以做到吗?如何做到?
这个问题 (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 下面的解决方案,比第二个快得多。
【问题讨论】: