正規表現でMovableType(MT)の余計な改行と行頭のスペースを消す
目次
MTによるページ構築時にどうしてもMTタグがあった部分に無駄な空白や改行が出来てしまいます。 それを正規表現を使って無駄な空白と改行を削除します。削除というよりregex_replaceで「何も無し」に置き換えます。
テンプレート(ページ)全部を対象にする場合
最初と最後の行に<mt:For></mt:For>を入れてテンプレート全体を囲います。余計な改行と行頭のスペースがすべて削除されたページが再構築時に出力されます。当たり前ですがPHPなどでインクルードされた部分には反映されません。MTのインクルードモジュールには反映されているみたいです。
<mt:For regex_replace="/^[\ \t\r\n]+/mg",""> <!DOCTYPE html> <html> . .(テンプレート内容) . </html> </mt:For>
<mt:For>の代わりに<mt:Unless></mt:Unless>または<MTUnless></MTUnless>でも使えます。
インクルードさせるモジュール内を対象にする場合
<$mt:Include module="sidebar" regex_replace="/^[\ \t\r\n]+/mg",""$>
上記の正規表現の意味について
先頭行にある半角スペース、タブ、改行のいずれかを繰り返し消すと意味になっています。それぞれの記号の意味は以下の通りです。
正規表現 | 意味 |
^ | 行頭 |
\+半角スペース | 半角スペース |
\t | タブ |
\r | キャリッジ リターン |
\n | 改行 |
[ ] | 囲った部分のいずれか |
/ /mg | 複数行対象に繰り返し |
正規表現の参考ページ
正規表現サンプル集 http://www.megasoft.co.jp/mifes/seiki/meta.html
修飾子(modifier)について
/~/mgの最後にあるmとかgは修飾子(modifier)と呼ばれるものらしいです。僕もよくわかっていないのですが、よく使う//gと//mgの違いがよくわかりませんが、どうやらPerlの正規表現で使われるものらしいです。ちなみに、mは「文字列を複数行として扱う」で、gは「グローバルなマッチング」?を意味しているようです。以下のページが参考になります。
オプション修飾子の種類と指定方法 - オプション修飾子 - perlにおける正規表現 http://www.perlplus.jp/regular/modifier/index1.html
perlre - perl の正規表現 - perldoc.jp http://perldoc.jp/docs/perl/5.14.1/perlre.pod
iの「大文字小文字を区別しないパターンマッチング」はどこかで役に立ちそうです。
その他参考になるページ
mt:mtタグがあることで出力される無駄な空白と改行を削除する | ハックノート https://hacknote.jp/archives/2969/
インクルードで読み込んだテンプレートの改行のみ削除なら
MTタグに一言追加で簡単に改行を削除
例えばファーストビューで読み込まれるのスタイルシートをインラインで表示したいときなど、テンプレートの出力から改行だけを削除する場合は以下のMTのコードを追加すれば簡単です。スタイルシートに限らず、HTMLを出力する際にも使えます。
strip_linefeeds="1"
使用例
例えばインデックステンプレートのスタイルシート(styles.css)をインライン化したいときはこんな感じです。
<style><$mt:Include identifier="stylesheet" strip_linefeeds="1"$></style>
regex_replaceと併用した例
regex_replaceを併用して更にCSSをギュッと縮めるとしたらこんな感じでできます。
- 行頭の半角スペース・改行・タブの削除
- 2つ以上の半角スペースの削除
- /*~*/のコメントの削除
- ", "(カンマと後ろの半角スペース)を","(カンマのみ)にする
- ": "(コロンと後ろの半角スペース)を":"(コロンのみ)にする
もっとスマートな書き方があるのかもしれませんが、とりあえずこれでも理想通りにできました。
参考ページ

mtタグの値から改行コードを除く | movabletype.net 逆引き辞典
https://movabletype.net/dict/global-17/strip-linefeeds.html
フォローしませんか?