2012-10-02 6 views
5

私がしたいのは、中括弧で囲まれたスペースをすべて見つけて、別の文字で置き換えます。変更するには中かっこで囲まれたすべてのスペースを置き換えます。

{The quick brown} fox jumps {over the lazy} dog 

::のような

何か

{The*quick*brown} fox jumps {over*the*lazy} dog 

は、私はすでにオンラインで検索、しかし、これだけは、私がこれまでに得たものであり、それは私が本当に欲しいものに非常に近いと思われます。

preg_replace('/(?<={)[^}]+(?=})/','*',$string); 

上記のコードで私の問題は、それがすべて置き換えられていることされています

{*} fox jumps {*} dog 

を私はスペースのみを交換するために上記のコードを変更する必要があります方法を理解するために正規表現のチュートリアルに探したが無駄にされました。どんな入力も高く評価されます。

ありがとうございました。

$result = preg_replace('/ (?=[^{}]*\})/', '*', $subject); 

これは、次のブレースが終了である場合にのみスペースと一致し、置き換え:すべてのブレースが正しく入れ子になって、ネストされた括弧がないことをされている、あなたは先読みアサーションを使用してこれを行うことができますと仮定すると

+1

ただ、文字列は、間に「*」と一緒に戻ってスペースと、その後猫結果の配列の間で爆発します。申し訳ありませんが、あまりにも疲れて、例を書いていません。 – noel

答えて

5

ブレース:私はヨーヨーに反応してい

$a = '{The quick brown} fox jumps {over the lazy} dog'; 
$b = preg_replace_callback('/\{[^}]+\}/sim', function($m) { 
    return str_replace(' ', '*', $m[0]); 
}, $a); 
var_dump($b); // output: string(47) "{The*quick*brown} fox jumps {over*the*lazy} dog" 
+0

ありがとうございます。これはすごくうまくいった。しかし、私はPHPの文字列関数(strpos、substrなど)を使用してソリューションを試しています。あなたはまだ正規表現を使用してアドバイスですか?私は正規表現が遅いなどについて読んだ。 – Bibokid

+2

@Bibokid:Zaffyと私の解決策を紹介し、正規表現が必ずしも遅くなるわけではないことを知ることができます(しかし、しばしばそれらは非常に不愉快に構成され、賢い解決法が利用可能なときに解決策を強制する必要があるため、 。多くの場合、正規表現ライブラリは高度に最適化されており、文字列関数を使用して自分で構築する任意のソリューションよりもはるかに高速になります。 –

1

あなたは、regexを使いたいとは言わず、単に文字列を操作してください。それはOKですが、なぜあなたは正規表現を探していると書いていますか?正規表現wihout

ソリューション:

<?php 

$str = "{The quick brown} fox jumps {over the lazy} dog"; 

for($i = 0, $b = false, $len = strlen($str); $i < $len; $i++) 
{ 
    switch($str[$i]) 
    { 
     case '{': $b = true; continue; 
     case '}': $b = false; continue; 
     default: 
     if($b && $str[$i] == ' ') 
      $str[$i] = '*'; 
    } 
} 

print $str; 

?> 
+0

ありがとうございます。私もこれを試し、他のソリューションと比較します。 – Bibokid

2

:これはどのように

(?=  # Assert that the following regex can be matched here: 
[^{}]* # - Any number of characters except braces 
\}  # - A closing brace 
)  # End of lookahead 
+0

私はここでstackoverflowの応答を待っている間、私は私の頭の中に入った非正規のソリューションを試していたということでした。ありがとう、私もこれを試してみましょう。 – Bibokid

関連する問題