プラグインなしでカンマ区切りの文字列を配列に変換する方法

mtevalモディファイアを使う

プラグインなしでカンマ区切りの文字列を配列にする方法を紹介します。

MTタグのように書いた文字列を、mtevalモディファイアでMTタグに変換し、カンマ区切りの文字列を配列に変換します。

サンプルテンプレート

<mt:SetVarTemplate name="FunctionCommaSplits">
    <mt:SetvarBlock name="rep_1">/,(?=(?:[^"]*"[^"]*")*[^"]*$)/mg</mt:SetvarBlock>
    <mt:SetvarBlock name="rep_2">","</mt:SetvarBlock>
    <mt:SetVarBlock name="MTdummy"><CN@mt:SetVar name="CommaSplits" value="<mt:Var name="request" regex_replace="$rep_1","$rep_2" >"></mt:SetvarBlock>
    <mt:Var name="MTdummy" replace="CN@","" mteval="1">
</mt:SetVarTemplate>

<mt:SetVarBlock name="SampleTag">令和,平成,昭和,大正,明治</mt:SetVarBlock>
<mt:Var name="FunctionCommaSplits" request="$SampleTag">

<mt:Loop name="CommaSplits">
    <mt:if name="__first__"><ul></mt:if>
        <li><mt:Var name="__value__"></li>
    <mt:if name="__last__"></ul></mt:if>
</mt:Loop>

解説

MTSetVarTemplateタグで、文字列を変換するモジュールを作成し、変数rep1に、カンマ区切りの文字列を判別する条件、変数rep2に、条件に合致して置換される値を設定します。

    <mt:SetvarBlock name="rep_1">/,(?=(?:[^"]*"[^"]*")*[^"]*$)/mg</mt:SetvarBlock>
    <mt:SetvarBlock name="rep_2">","</mt:SetvarBlock>

変数MTdummyの中に、MTタグと認識させない文字列「CN@」を追加した、変数CommaSplitsを作成し、

変数FunctionCommaSplitsの、変数requestに設定された、カンマ区切りの文字列を出力し、正規表現を行います。

<mt:SetVarBlock name="MTdummy">
    <CN@mt:SetVar name="CommaSplits" value="<mt:Var name="request" regex_replace="$rep_1","$rep_2" >">
</mt:SetvarBlock>

最後に、変数MTdummyから、文字列「CN@」を削除し、mtevalモディファイアでMTタグに変換します。

<mt:Var name="MTdummy" replace="CN@","" mteval="1">

文字列が変更前の形で出力され、変更後の形に変換されます。

変更前
<CN@mt:SetVar name="CommaSplits" value="令和","平成","昭和","大正","明治">

変更後
<mt:SetVar name="CommaSplits" value="令和","平成","昭和","大正","明治">

配列として設定されたので、値を通常のMTLoopタグで出力できます。

<mt:Loop name="CommaSplits">
    <mt:if name="__first__"><ul></mt:if>
        <li><mt:Var name="__value__"></li>
    <mt:if name="__last__"></ul></mt:if>
</mt:Loop>

正規表現に詳しい人がいたら、もう少し良い形にしてほしいです。

おわり。