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

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/09/20 21:25:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:windofjuly No.1

回答回数2625ベストアンサー獲得回数1149

ポイント100pt
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=""

id:windofjuly

変数名がfavoriteのままだったので、修正を行い、蛇足のくどい説明も付け足しました。

2013/09/14 02:11:18

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません