MT Regex Plugin で正規表現を使う

ある理由で MT Regex Plugin を使用したのでメモ。この MT Regex Plugin は正規表現による条件分岐や変換など、様々なカスタマイズが可...

ある理由で MT Regex Plugin を使用したのでメモ。この MT Regex Plugin は正規表現による条件分岐や変換など、様々なカスタマイズが可能になる高機能プラグイン。

プラグイン本体をダウンロードしたら解凍しましょう。中には 5つのファイルがあるはずです。そのうち、license.txt と readme.txt は動作には関係ないので、残りの 3つをサーバにアップします。アップするディレクトリは下記の通り。

  • regex.pl → (mt home)/plugins/regex.pl
  • regex.pm → (mt home)/extlib/bradchoate/regex.pm
  • postproc.pm → (mt home)/extlib/bradchoate/postproc.pm

bradchoate というディレクトリはデフォルトでは存在しないので、なければ作ってください。インストールはこれで終了。

これで <MTRegexDefine>、<MTIfMatches>、<MTIfNotMatches>、<MTRegex>、<MTGrep> という 5つの MTタグと、「regex="N | name"」 というグローバルフィルタが利用可能になります。

実際の使い方ですが、もっとも簡単な使い方が下記。「-D」 と記述があった場合、その部分をすべて 「example.gif」 に置き換えたいなんて場合、まず最初に正規表現を定義します。これはこの正規表現を使用するテンプレート内に記述。

<MTRegexDefine>s|:-D|<img src="/example.gif" height="10" width="10" alt="" />|g</MTRegexDefine>

で、お次にこれを適用したい MTタグに下記のようにグローバルフィルタを適用。

<$MTEntryBody regex="1"$>

これで、<$MTEntryBody$> 内に 「-D」 という記述があった場合は、すべて 「example.gif」 に置き換えられてソースが生成されます。最初の正規表現を定義する記述が複数記述されていれば、それらすべてが適用されます。

ひとつのテンプレート内で複数の正規表現を使い分けたい場合は、下記のようにそれぞれ任意の名前を付けて定義することも可能。

<MTRegexDefine name="patt1">s|強調|<strong>強調</strong>|g</MTRegexDefine>
<MTRegexDefine name="patt2">s|google\(([^\)]+)\)|<a href="http://www.google.co.jp/search?q=$1" title="Google This!">$1</a>|g</MTRegexDefine>

グローバルフィルタの適用は下記のように。

<MTEntries>
 <$MTEntryTitle regex="patt1"$>
 <$MTEntryBody regex="patt2"$>
 <$MTEntryMore regex="patt1 patt2"$>
</MTEntries>

こんな書き方でも可。

<MTEntries regex="patt1 patt2">
 <$MTEntryTitle$>
 <$MTEntryBody$>
</MTEntries>

「強調」 というテキストを <strong> でマークアップ。「google(テキスト)」 という記述があったら、Google の検索結果へのリンクへ変換しています。

その他にパターンマッチで条件分岐を実現する <MTIfMatches>、<MTIfNotMatches> タグも便利。

例えば、<$MTEntryBody$> に 「ブログ」 と記述があったときだけ表示させるとか、

<MTEntries>
 <MTIfMatches pattern="m/ブログ/">
  <$MTEntryBody$>
 </MTIfMatches>
</MTEntries>

同じく、

<MTRegexDefine name="match1">m/ブログ/</MTRegexDefine>
<MTEntries>
 <MTIfMatches pattern="match1">
  <$MTEntryBody$>
 </MTIfMatches>
</MTEntries>

投稿者が brad、ben、mena のいずれかだったときのみ表示するとか、

<MTEntries>
 <MTIfMatches var="EntryAuthor" pattern="m/(brad|ben|mena)/i">
  <$MTEntryBody$>
 </MTIfMatches>
</MTEntries>

逆の場合は <MTIfNotMatches> を使ってこんな感じとか、

<MTEntries>
 <MTIfNotMatches var="EntryAuthor" pattern="m/(brad|ben|mena)/i">
  <$MTEntryBody$>
 </MTIfNotMatches>
</MTEntries>

エントリー数が 1000件の時だけ表示するとか、

<MTIfMatches var="BlogEntryCount" value="1000">
 <strong>1,000 エントリー達成!</strong>
</MTIfMatches>

使いこなせば非常に役に立つこと間違いなし。

記事をここまで御覧頂きありがとうございます。
この記事が気に入ったらサポートしてみませんか?