ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

ホーム > コミュニティ > PC、インターネット > MT備忘録 > トピック一覧 > 【小技?】 regex_rep...

MT備忘録コミュの【小技?】 regex_replaceに変数を用いる際の注意点(MT5用)

  • mixiチェック
  • このエントリーをはてなブックマークに追加

コミュ内全体

MT5の環境で、Website内にあるブログ陣との連携の絡みで
ブログURLの相対パスを書き出す「<$MTBlogRelativeURL$>」を使用したのだが、
書き出された結果は、

/websitedirectory/blogdirectory/

と、こんな感じの結果に。
だが実際に欲しいのはブログが格納されている「ディレクトリ名」のみ(前後の「/」とかもいらない)
だったので、あれこれ調べてみて、約7時間くらい悪戦苦闘した結果を記してみる。

まず、親ディレクトリである「/websitedirectory/」を引き出して変数にほおり込むにはこんな感じ

<MTBLOGPARENTWEBSITE>
<MTSetVarBlock name="websiteReURL"><$MTBlogRelativeURL$></MTSetVarBlock>
</MTBLOGPARENTWEBSITE>

<MTBLOGPARENTWEBSITE>はMT5において、ブログが内包されてる「Webサイト」の情報を
引き出す際に使われるブロックタグなので、ブログのテンプレートではこれを使用する。


で、<MTSetVarBlock>についてかなり癖があることが判明したのは、
「<MTSetVarBlock>で囲まれた部分すべてが変数に格納される」ということである。
これだけだとわけわかんないけど、

<MTSetVarBlock name="websiteReURL">
<$MTBlogRelativeURL$>
</MTSetVarBlock>

こんな感じに書いてしまうと「改行コードも変数に格納されてしまう」ということです。だから、

<MTSetVarBlock name="websiteReURL">
<$MTBlogRelativeURL$>
</MTSetVarBlock>

こんな風にインデントを入れてしまうと「インデント部分」も変数に格納されてしまうので、マジで注意です><;

まあこれで、変数「$websiteReURL」には「/websitedirectory/」が無事格納されました。

次に、「/websitedirectory/blogdirectory/」から「/websitedirectory/」を削る作業に入るのですが、
regex_replaceの基本は
regex_replace="/置き換えたい文字列/","変更後の文字列"
なので

<$MTBlogRelativeURL regex_replace="/$websiteReURL/",""$>

これでうまくいくかと思いきや、まったくマッチングされません><
置き換えたい文字列を変数で置き換える場合、「/」の部分がつけられなくなります。
なので

<$MTBlogRelativeURL regex_replace="$websiteReURL",""$>

と、こう書くのが正解なのですが、こうしてしまうと、置き換え結果は
//blogdirectory/
となってしまいます(汗

つまり、あらかじめ変数に「/」を入れてやらないといけなくなります。
最終的に以下のような形になりました。


<MTBLOGPARENTWEBSITE>
<MTSetVarBlock name="websiteReURL">/<$MTBlogRelativeURL$>([a-zA-Z0-9]*)//</MTSetVarBlock>
</MTBLOGPARENTWEBSITE>

<$MTBlogRelativeURL regex_replace="$websiteReURL","$1"$>


「blogdirectory/」部分の最後の「/」を消すために、正規表現を利用することになりましたが、
正規表現については各自調べてみてください。

コメント(0)

mixiユーザー
ログインしてコメントしよう!

MT備忘録 更新情報

MT備忘録のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。