PHPの正規表現で1文字スペースだけ置換する

シェアする

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存

How to replace a single space using preg_replace in PHP

preg_replaceで、空白文字1つだけをマッチさせて置換させるための正規表現

<?php
$sResult = str_replace("#(\S)(\s)(\S)#" , "\\1●\\3", $str);
?>

以下はコメントとスペースを削除する関数の例

<?php
function fCallbackStrip($sScript){
$aReplace = array(
"#(\S)(\s)(\S)#" => "\\1X●●●●●X\\3", /* ここで空白文字をマーキング(置換) */
"#\t#" => "",
"#\n#" => "",
"#/\*.*?\*/#s" => "",  /* C言語風コメントを削除 */
"#\s\s+#"      => "", /* 過剰なスペースを削除 */
);
$aSearch = array_keys($aReplace);
$sScript = preg_replace($aSearch, $aReplace, $sScript);
/* 置換用配列 */
$aReplace = array(
"X●●●●●X"  => " ", /* ここで戻す */
": "  => ":",
"; "  => ";",
" {"  => "{",
" }"  => "}",
", "  => ",",
"{ "  => "{",
";}"  => "}", /* 末行のセミコロン削除 */
",\n" => ",", /* セレクタの改行を削除 */
"\n}" => "}", /* 大括弧前の改行を削除 */
"} "  => "}\n", /* 大括弧ごとに1行にまとめる */
);
$aSearch = array_keys($aReplace);
$sScript = str_replace($aSearch, $aReplace, $sScript);
return trim($sScript);
}
?>

ソースコードをMINIMIZE化(軽量化)する場合などで、連続スペースを1つの空白文字(スペース)に置換する処理を行うことがあります。

しかし、ソースコード上のインデントをタブでなくスペースで行っていた場合、余計なシングル・スペースが出来ることになります。

回避方法としては、予め1つのみの空白文字を別の文字に置き換えておいて、連続するスペースだけを削除した後にスペースに置き換えます。

■流れ
"   <meta charset='UTF-8'>"
↓
"   <meta●charset='UTF-8'>"
↓
"<meta●charset='UTF-8'>"
↓
"<meta charset='UTF-8'>"

スポンサーリンク
レクタングル(大)広告
レクタングル(大)広告

シェアする

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存