2017-10-09 15 views
1

whitespaces & newlines,に置き換えるためにここに私のRegExがあります。空白と改行をコンマで置き換える

preg_replace('#\s+#',',',trim($str)); 

コードは次のような場合

$str = " 
a 
b 
c 
"; 

のために完璧に動作しますが、私は

$str = " 
a, 
b, 
c 
"; 

または

$str = " 
a , 
b , 
c , 
"; 

のようなものを書いた場合、私は、最初のケースのために得るa,,b,,cそして2番目の場合a,,,b,,,c

preg_replace()の前にstrtr($str,',' => '')を試してみましたが、うまくいかなかったのですが、どうすればpreg_replaceで直接処理できますか?

私の望む出力はすべての値のためです。 a, b, c, . . . .カンマがある場合は、すでに存在しているか、削除されていて清掃されていて、最後に1カンマで区切られているためエスケープされます。あなたの要件について

+1

あなたの欲しいものは何ですか? – Philipp

+1

完璧に動作するものでは、 '、a、b、c、'を得るべきです - あなたが実際に望んでいるものですか?正規表現を使用すると、何かが定期的に期待されることになります。入力が正規ではない場合、RegExpは最良の選択ではないかもしれません。あなたは正確に何を達成しようとしていますか? – CD001

+0

@Philipp今質問の終わりにそれを書きました。 – AXAI

答えて

1

イムcompletlyわからないが、あなたは、次の試してみてください、これらの

/[\s,]+$\n|[\s,]+/gm 

か、単に

/[\s,]+/ 
+0

カンマでスペースを追加する場合は、カンマを付ける – AXAI

+0

@AXAI 2番目のカンマは.. – Philipp

+0

実際には2番目にコンマの数が2倍になります。 – AXAI

1

のいずれかを試みることができる:

$arr = explode("\r\n", $str); 

array_walk($arr, function(&$item, $key) 
{ 
    $item = rtrim($item,','); 
    $item = trim($item); 
}); 

$result = trim(implode(',', $arr), ','); 


var_dump($result); 

はそれではありません正規表現の解決策ですが、動作します。文字列を配列に変換し、カンマと空白を削除してから、配列を文字列に変換してカンマを追加します。

+0

うまく動作しますが、パフォーマンスの場合、通常の' preg_replace'よりも時間がかかりませんか?しかし、スティル作品。 – AXAI

+1

@AXAI必ずしも私はベンチマークをいくつか実行しましたが、私のソリューションはpreg_replaceより速いことを示しています。 https://3v4l.org/70LPZといくつかの 'preg_replace'はいくつかのバージョンで高速です。 – mega6382

関連する問題