2012-05-10 15 views
2

可能な重複置き換えます。次のように私は、文字列を持っている
Replace only first match using preg_replace新しいラインで複数の空白の最初の出現

を:

a  quick brown  fox jumps over a lazy dog 

をし、私が欲しいです結果は

a 
quick brown  fox jumps  over a lazy dog 

複数の(1つを超える)空白の最初の出現箇所のみを改行で置き換えますが、それ以外の複数の空白はそのまま残しておきます。

私はどのようにpreg_replaceでこれを行うことができますか?唯一の発生を置き換えるために

おかげ

+0

あなたは理由を説明することはできますか?たぶん、これに取り組むためのより良い方法があります。最初の正解は –

答えて

3
echo preg_replace('/\s{2,}/', "\n", $string, 1); 

preg_replaceの4番目の引数は、パターンを交換しなければならない回数を制限し、任意の限界です。

+0

'\ s +'は1つの空白文字(または2つ以上)と一致します。 – 0b10011

+0

@bfrohs nice spotting、更新済み –

+0

ありがとうございました。魅力的に働いた。 – WebNovice

2

使用preg_replace()さん$limit

$string = preg_replace("/\s\s+/", "\n", $string, 1); // \s\s+ to replace 2 or more 
// Where preg_replace($pattern, $replacement, $subject, $limit); 

$限度各対象文字列内の各パターンの最大の可能な代替品。デフォルトは-1(無制限)です。 PHP documentationから

+0

+1です。 –

+1

@AlexLunix、実際には*正確ではありませんでしたが(他の回答も)、今はそれです:)(以前は '1 \\\ 'と一致する' 「1以上」または「2以上」) – 0b10011

+0

ありがとう、これも動作します。私は両方の答えを選ぶことができれば幸いです。 – WebNovice

3

はパターンのために作られた代替品の制限を設定する、オプションの四番目のパラメータを使用します。

$str = preg_replace("/\s{2,}/", PHP_EOL, $str, 1); 

はデモンストレーション:http://codepad.org/Kocnyryj

+0

'\ s +'は1つ以上の空白文字( "複数ではない")と一致します。 – 0b10011

+0

@bfrohs微妙な違いはありますが、それを指摘してくれてありがとう。 – Sampson

関連する問題