$data
には、タブ、先頭のスペース、および複数のスペースが含まれます。すべてのタブをスペースに置き換えたいのですが。 1つのスペースで複数のスペースを作成し、先頭のスペースを削除します。
実際、この入力データを変える何か:
[ asdf asdf asdf asdf ]
出力データへ:
[asdf asdf asdf asdf]
どうすればよいですか?
$data = trim(preg_replace('/\s+/g', '', $data));
トリミングし、タブと余分なスペースを単一のスペースに置き換えます。
$data = preg_replace('/[ ]{2,}|[\t]/', ' ', trim($data));
角括弧が文字列の一部ではなく、説明の目的で使用していると仮定すると、次のようになります。
$new_string = trim(preg_replace('!\s+!', ' ', $old_string));
単一の正規表現でそれを行うことができるかもしれませんが、それはかなり複雑な正規表現になります。上記ははるかに簡単です。
注:「AB\t\tCD」(\ tはタブ)を「ABCD」に置き換えたくないと仮定しています。
$data = trim($data);
これにより、先頭(および末尾)のスペースが削除されます。
$pattern = '/\s+/';
$data = preg_replace($pattern, ' ', $data);
これにより、1つ以上のスペースのコレクションが1つのスペースに変わります。
$data = str_replace("\t", " ", $data);
それはあなたのタブを取り除きます。
$new_data = preg_replace("/[\t\s]+/", " ", trim($data));
も削除する必要がある場合。
$data = trim(preg_replace('/\s+|nbsp;/g', '', $data));
多くのフラストレーションの後、2文字の長さになる可能性のある改行しないスペースも削除されるため、これが最善の解決策であることがわかりました。
$data = html_entity_decode(str_replace(' ',' ',htmlentities($data))); $data = trim(preg_replace('/\h/', ' ', $data));
//\sよりも多くのスペース文字タイプを置き換えます
billynoah を参照してください
この答えは完全に文字通り質問を取ります:それはスペースとタブに関係しているのみです。確かに、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 );
}
したがって、パターン文字列と置換文字列の代わりに、パターン配列と置換配列を使用します。これにより、余分なパターンL
とR
がトリミングされます。