正規表現で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",""$>

Keywordに含まれた半角スペースを削除する例

カンマの前後にある半角スペースを削除する例

ブログを投稿する際、「キーワード」欄に,(カンマ)の前後にうっかり半角スペースを含めてしまうことがあります。そんなときに使用する例。"Movable Type, 正規表現 , 置換""Movable Type,正規表現,置換"というように、カンマで区切られた文字列の前後にある半角スペースだけ削除します。

<meta name="keywords" content="<$mt:EntryKeywords trim="1" regex_replace="/,\s/mg","," regex_replace="/\s,/mg",","$>">

条件を|で区切ったり、一発で置き換え方法があるかとは思いますが、今のところ分からないのでパス。

キーワード内にあるすべての半角スペースを置換える場の例。

"Movable Type, 正規 表現 , 置 換""MovableType,正規表現,置換"のように、全ての半角スペースを削除します。

<meta name="keywords" content="<$mt:EntryKeywords trim="1" regex_replace="/\s+/mg",""$>">

空白文字のを削除する正規表現の方法は以下のページが参考になりました。

Link

入力された文字列に含まれる空白文字を削除する方法 - Javascript Tipsふぁくとりー

https://www.nishishi.com/javascript-tips/trim-space-chars.html

上記の正規表現の意味について

先頭行にある半角スペース、タブ、改行のいずれかを繰り返し消すと意味になっています。それぞれの記号の意味は以下の通りです。

正規表現 意味
^ 行頭
\+半角スペース
\s
半角スペース
\t タブ
\r キャリッジ リターン
\n 改行
[ ] 囲った部分のいずれか
/ /mg 複数行対象に繰り返し

正規表現の参考ページ

Link

正規表現サンプル集

https://www.megasoft.co.jp/mifes/seiki/meta.html

修飾子(modifier)について

/~/mgの最後にあるmとかg修飾子(modifier)と呼ばれるものらしいです。僕もよくわかっていないのですが、よく使う//g//mgの違いがよくわかりませんが、どうやらPerlの正規表現で使われるものらしいです。ちなみに、m「文字列を複数行として扱う」で、g「グローバルなマッチング」?を意味しているようです。以下のページが参考になります。

Link

301 Moved Permanently

https://www.javadrive.jp/perl/regex/modifier/index1.html

Link

Perlre - Perl の正規表現 - Perldoc.jp

https://perldoc.jp/docs/perl/5.14.1/perlre.pod

i「大文字小文字を区別しないパターンマッチング」はどこかで役に立ちそうです。

その他参考になるページ

Link

Movabletypeの Regex_replace を使って色々と置換する方法[自分でなんとかするweb]

https://every-rating.com/mt/movabletype-regex-replace.html

Link

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をギュッと縮めるとしたらこんな感じでできます。

もっとスマートな書き方があるのかもしれませんが、とりあえずこれでも理想通りにできました。

参考ページ

Link

Mtタグの値から改行コードを除く | Movabletype.net 逆引き辞典

https://movabletype.net/dict/global-17/strip-linefeeds.html

PAGETOP