web-dev-qa-db-ja.com

PHPでタブを変数内のスペースに置き換えるにはどうすればよいですか?

$dataには、タブ、先頭のスペース、および複数のスペースが含まれます。すべてのタブをスペースに置き換えたいのですが。 1つのスペースで複数のスペースを作成し、先頭のスペースを削除します。

実際、この入力データを変える何か:

[    asdf asdf     asdf           asdf   ] 

出力データへ:

[asdf asdf asdf asdf]

どうすればよいですか?

17
Arthur
$data = trim(preg_replace('/\s+/g', '', $data));
16
RaYell

トリミングし、タブと余分なスペースを単一のスペースに置き換えます。

$data = preg_replace('/[ ]{2,}|[\t]/', ' ', trim($data));
19
ahc

角括弧が文字列の一部ではなく、説明の目的で使用していると仮定すると、次のようになります。

$new_string = trim(preg_replace('!\s+!', ' ', $old_string));

単一の正規表現でそれを行うことができるかもしれませんが、それはかなり複雑な正規表現になります。上記ははるかに簡単です。

注:「AB\t\tCD」(\ tはタブ)を「ABCD」に置き換えたくないと仮定しています。

4
cletus
$data = trim($data);

これにより、先頭(および末尾)のスペースが削除されます。

$pattern = '/\s+/';
$data = preg_replace($pattern, ' ', $data);

これにより、1つ以上のスペースのコレクションが1つのスペースに変わります。

$data = str_replace("\t", " ", $data);

それはあなたのタブを取り除きます。

1
Gabriel Hurley
$new_data = preg_replace("/[\t\s]+/", " ", trim($data));
1
slosd

 も削除する必要がある場合。

$data = trim(preg_replace('/\s+|nbsp;/g', '', $data));
0
Ivo Pereira

多くのフラストレーションの後、2文字の長さになる可能性のある改行しないスペースも削除されるため、これが最善の解決策であることがわかりました。

$data = html_entity_decode(str_replace(' ',' ',htmlentities($data))); $data = trim(preg_replace('/\h/', ' ', $data)); //\sよりも多くのスペース文字タイプを置き換えます

billynoah を参照してください

0
will

この答えは完全に文字通り質問を取ります:それはスペースとタブに関係しているのみです。確かに、OPおそらくは、トリミング/圧縮されるものに他の種類の空白を含めたいと考えていますが、埋め込みを保持したいふりをしましょう。 CR および/または LF

まず、いくつかの定数を設定しましょう。これにより、変更が必要になった場合に、理解しやすく、保守しやすくなります。類似点と相違点をより簡単に比較できるように、いくつかの余分なスペースを入れました。

define( 'S', '[ \t]+'      ); # Stuff you want to compress; in this case ONLY spaces/tabs
define( 'L', '/\A'.S.'/'   ); # stuff on the Left Edge will be trimmed
define( 'M',   '/'.S.'/'   ); # stuff in the Middle will be compressed
define( 'R',   '/'.S.'\Z/' ); # stuff on the Right Edge will be trimmed
define( 'T', ' '           ); # what we want the stuff compressed To

通常の\A\Zの代わりに、^$エスケープ文字 を使用して件名の開始と終了を指定しています。行指向 メタ文字Sの値が将来必要になるように変更された場合に備えて、このインスタンスでは「防御」プログラミングと同じくらい必要になるため、これはそれほど多くありません。

ここで秘密のソースについて: preg_replace 、つまり(強調を追加)のいくつかの特別なセマンティクスを利用します。

置換arrayの要素がパターン配列よりも少ない場合、余分なパターンは空の文字列に置き換えられます。

function trim_press( $data ){
    return preg_replace( [ M, L, R ], [ T ], $data );
}

したがって、パターン文字列と置換文字列の代わりに、パターン配列と置換配列を使用します。これにより、余分なパターンLRがトリミングされます。

0
Jeff