人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

movabletypeのカスタムフィールドの複数行から1行ずつ取り出して処理をする方法をお教えください。

こちらのサイトを参考に
http://www.tinybeans.net/blog/2012/06/16-075413.html
1行ずつ取り出して、処理をしようと、努力はしたものの、挫折しております。

追加プラグインなしで1行ずつのデータが取り出せればそれでOKです。

変数 data に
abc[\n]
def[\n]
ghi[\n]
の値が入っていて

loop開始
1回目で abc が取り出せる。
2回目で def が取り出せる。
3回目で ghi が取り出せる。
loop終了

の処理をお教えください。


は・・正規表現は難しい・・・。

URLでも可ですが、ここを参考にして作成する等々の時には、ポイント比率を下げさせていただきます。


●質問者: kameoyaji_2
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● うぃんど
●100ポイント
mt:Var name="data" regex_replace="/[^\n]/g","" count_characters="1" setvar="length"

区切り文字(今回は\n)以外を消して、残った文字を数えれば要素数。
変化の流れ abc[\n]def[\n]ghi[\n] → [\n][\n][\n] → 3つ → 変数lengthに3を入れる
※参考サイトは末尾に,がないためcat=","で一つ付け加えてますが、今回は末尾に\nがあるのでcat="\n"は不要です

mt:Var name="data" regex_replace="/^([^\n]+).*/s","$1" setvar="value"
mt:Var name="data" regex_replace="/^([^\n]+\n?)(.*)/s","$2" setvar="data"

s修飾子を付けることで.に改行コードを含めるように指示します。
s修飾子が無い場合は改行コードでちょん切れてしまいます。

環境がなくて動かせてないのですが、要点だけ回答させてもらいました。

????以降追記

ループ1回目

mt:Var name="data" regex_replace="/^([^\n]+).*/s","$1" setvar="value"

"/^([^\n]+).*/s"に"abc[\n]def[\n]ghi[\n]"が与えられると次の二つのパーツに切り分けられます。

^[^\n]+先頭から続く\n以外の文字列abc
.*後続の文字列[\n]def[\n]ghi[\n]

(かっこ)で囲まれている部分は後ろの処理で使えるように記憶され、
(かっこ)の登場順に$1,$2…で利用することができます。
かっこは([^\n]+)の一組だけなので$1にはabcが入ります。
流れとしては"abc[\n]def[\n]ghi[\n]"を"abc"に置き換えた後、変数valueに格納となります。

mt:Var name="data" regex_replace="/^([^\n]+\n?)(.*)/s","$2" setvar="data"

"/^([^\n]+\n?)(.*)/s"に"abc[\n]def[\n]ghi[\n]"が与えられると次の二つのパーツに切り分けられます。

^[^\n]+\n?先頭から最初に出てくる\nまでの文字列abc\n
.*後続の文字列def[\n]ghi[\n]

(かっこ)は二組あるので順に"abc\n"が$1、"def[\n]ghi[\n]"が$2に入ります。
流れとしては"abc[\n]def[\n]ghi[\n]"を"def[\n]ghi[\n]"に置き換えた後、変数dataに格納となります。
これが繰り返されることによりループの中で徐々に変数dataが削られていく形になり最後には空になります。

ループ2回目
mt:Var name="data" regex_replace="/^([^\n]+).*/s","$1" setvar="value"
"def[\n]ghi[\n]" → 変数value="def"
mt:Var name="data" regex_replace="/^([^\n]+\n?)(.*)/s","$2" setvar="data"
"def[\n]ghi[\n]" → 変数data="ghi[\n]"

ループ3回目
mt:Var name="data" regex_replace="/^([^\n]+).*/s","$1" setvar="value"
"ghi[\n]" → 変数value="ghi"
mt:Var name="data" regex_replace="/^([^\n]+\n?)(.*)/s","$2" setvar="data"
"ghi[\n]" → 変数data=""


うぃんどさんのコメント
変数名がfavoriteのままだったので、修正を行い、蛇足のくどい説明も付け足しました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ