LoginSignup
0
0

MT:Forを入れ子にした時の実行順

Last updated at Posted at 2024-06-07

MT:Forを重ねて記載した時の実行順は記載した順ではなく入れ子の内側からになる。

例えばこんな感じで重ねまくってhtmlタグを除去してテキストだけにしたい場合

<mt:For regex_replace="/<("[^"]*"|'[^']*'|[^'">])*>/gm","">
<mt:For regex_replace="/<style.*</style>/gm","">
<mt:For regex_replace="/<script.*</script>/gm","">
<mt:For regex_replace="/(?:\n|\r|\r\n|\t)/mg","">
<p>テキストだよ</p>
<script>
スクリプトだよ
</script>
<style>
スタイルだよ
</style>
</mt:For>
</mt:For>
</mt:For>
</mt:For>

感覚では
<mt:For regex_replace="/<("[^"]*"|'[^']*'|[^'">])*>/gm","">
から、下に向かって順番に実行されるように勘違いしてしまった。

実際には
<mt:For regex_replace="/(?:\n|\r|\r\n|\t)/mg","">
から上に向かって順番に実行される。

戒め

段階を分けて順番に置換して行く時って、実行順間違えると意図通りに動かなくなるので、どのような順番で動くのか意識していないとやらかす。

よくよく考えると当たり前なんだけど通常のプログラムばっかり書いていて久しぶりにMT触って混乱した点でした。

余談

アウトプットって難しい。精進します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0