MovableTypeのregex_replaceでシングルクォーテーションの置換えをするとエラーが出るとき

MovableTypeでAMP対応のページを書き出すためのテンプレートができてもGoogle Search ConsoleAccelerated Mobile Pagesで致命的なエラーや警告が次々出てきてHTMLのソースを修正しなければならない部分がたくさん出てきました。

border="0"target="_blank"とかstyle="**"を使ったらダメとか...。

これらと一つ一つを正規表現で置換をするMT関数のregex_replaceを使って不要な要素を削除することにしました。

ただ、自分は正規表現が苦手でなかなか思った通りの置換や不要な文字列の削除ができませんでした。しかし、なんとか解決できたので参考になった正規表現のサンプルのページやソースをメモ。

正規表現による置換の参考

Link

Wordpressの投稿本文をamp化する方法

https://nelog.jp/wordpress-content-to-amp

上記のページはWordPress向けにPHPで書かれておりますが、わかりやすかったです。

シングルクォーテーションでエラー

ここまではよかったのですが、シングルクォーテーション(')でつまずきました。

例えば、borderを消そうとしたとき、border="0"border='0'のように0をダブルクォーテーションで囲ってある場合と、シングルクォーテーションで囲ってある場合があります。正規表現の検索対象にシングルクォーテーション(')が含まれていると、DreamWeaverや正規表現の使えるテキストエディタではちゃんと置換ができるのに、全く同じ正規表現をMovableTypeのテンプレートに使うとエラーが出てうまくいきませんでした。ダブルクォーテーション(")だけだと問題なく置換できました。

エラーが出たソース

<$mt:Var name='regex_0' value='/( border| target| style| onclick)=["'](.*?)["']/g'$>
<$mt:Var name='regex_1' value=''$>
<MTUnless regex_replace="$regex_0","$regex_1">
<mt:EntryBody>
<mt:EntryMore>
</MTUnless>

["']のように<$mt:Var>valueの値にシングルクォーテーション(')を含まれているとエラーが出ます。シングルクォーテーション(')に¥マークを付けて¥'とエスケープしてもダメでした。

原因は変数の使い方

原因はMTのテンプレート内で使う変数をセットする書き方(<$mt:Var~$>)が悪かったようで、以下のページ内にもあるように<MTSetVarBlock>~</MTSetVarBlock>を使って変数に正規表現の検索対象を入れて使うと解決できました。

Link

301 Moved Permanently

http://www.skyarc.co.jp/engineerblog/entry/regex_replace_1.html

ダブルクォーテーション(")は特に問題ないのですが、シングルクォーテーション(')は注意が必要です。

うまくいったソース

<MTSetVarBlock name="regex_0">/( border| target| style| onclick)=["'](.*?)["']/g</MTSetVarBlock>
<MTSetVarBlock name="regex_1"></MTSetVarBlock>
<MTUnless regex_replace="$regex_0","$regex_1">
<mt:EntryBody>
<mt:EntryMore>
</MTUnless>

これで、border="**"、target="**"、style='**'、 onclick='**'など、ダブルクォーテーションとシングルクォーテーションのどちらで囲ってあっても全部削除できます。

その他参考ページ

Link

301 Moved Permanently

http://dtp.jdash.info/archives/MovableType_regex_replace_array

PAGETOP