2011-12-23 4 views
12

preg_replace()のようなPHPメソッドと正規表現を使用して大文字の文字列にスペースを追加したいが、それらが連続しているときに最初の大文字にスペースを追加したいだけだ。私は正規表現に、連続した首都の最後の首都が前にスペースを置くための次の首都でなければならないことを知りたい。大文字で文字列にスペースを追加するにはどうすればよいですか?PHPとRegexを使用して連続した大文字を維持しますか?

これらの文字列は例です:

なっ
 
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)は、これで実現しているようです。

WORKING SOLUTION

ここで私が使用して完全なコードです:

$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のソリューション@からです2番目のものよりも非常にわずかに高速です。

答えて

10

検索:

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

は交換してください:

$1 

ノート$1

編集の前にスペース:修正。

+0

この正規表現でこれを達成するにはどのPHPメソッドを使用しますか? –

+0

@ T.BrianJones:それは[preg_replace](http://php.net/manual/en/function.preg-replace.php)です。 – Regexident

+0

'preg_replace():コンパイルに失敗しました:POSIXという名前のクラスは、オフセット4のクラス内でのみサポートされています。' '次のエラーが発生します:' echo preg_replace( '((<![!upper:]) )、 '$ 1'、$ string); ' –