アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもお世話になっております。
rubyで分からないことがあります。
ご存知の方がおられましたら、ご教授お願い致します。

【質問】
以下の文字列があるとします。
(文字列)
<!-- Advertiser 'XXX', Include user in segment 'test' - AAA -->\n<img src=\"BBB\" width=\"1\" height=\"1\" />\n<!-- End of segment tag -->\n<!-- Advertiser 'XXX', Exclude user from segment 'test' - AAA -->\n<img src=\"CCC\" width=\"1\" height=\"1\" />\n<!-- End of segment tag -->

この文字列を以下の様に変数1、変数2に入れたいのですが、
どのようにプログラムを記述すればよいでしょうか?
(変数1の内容)
<!-- Advertiser 'XXX', Include user in segment 'test' - AAA -->\n<img src=\"BBB\" width=\"1\" height=\"1\" />\n<!-- End of segment tag -->
(変数2の内容)
<!-- Advertiser 'XXX', Exclude user from segment 'test' - AAA -->\n<img src=\"CCC\" width=\"1\" height=\"1\" />\n<!-- End of segment tag -->

A 回答 (2件)

※申し訳ありません。

余計なエスケープが含まれていましたので削除しました。
a , b = str.split(/\n(?=<!--\s+Advertiser)/)


(?= )は正規表現の先読みという機能です。
\nの後に <!-- Advertiser という文字列が続く「位置」にマッチします。
位置というのがポイントです。<!-- Advertiser自信を含めてしまうと、
splitした際に<!-- Advertiserが消えてしまいます。

【先読み有りの場合】
\n <!-- Advertiser
↑↑
「\n」と「\nと<!-- Advertiserとの間の位置」にマッチし、
<!-- Advertiser 自身は含まれません。

【先読み無しの場合】
\n<!-- Advertiser
↑↑↑↑↑↑↑↑
「\n<!--\s+Advertiser」にマッチし、<!-- Advertiserも含まれてしまう。


この2つの動きを比べてみると詳細がわかると思います。
a , b = str.split(/\n<!--\s+Advertiser/) #先読み無し
a , b = str.split(/\n(?=<!--\s+Advertiser)/)#先読み有り。
    • good
    • 0
この回答へのお礼

ありがとうございます。
大変勉強になりました。

今後ともよろしくお願い致します。

お礼日時:2010/07/09 18:52

仕様がよくわかりませんが、


a , b = str.split(/\n(?=\<!\-\-\s+Advertiser)/)
p a
p b
もっと厳格に開始と終了タグをチェックするとそれなりの処理が必要になります。

この回答への補足

ご回答ありがとうございます。
実際にプログラムに入れたら出来ました。

申し訳ありませんが、split()の記述でわからないところがありますので、
教えてください。

str.split(/\n(?=\<!\-\-\s+Advertiser)/の
\n(?=\<!\-\-\s+Advertiser)部分のどのような処理を行っているのでしょうか?

基本的なことで大変申し訳ございませんが、
ご教授頂けましたら幸いです。

補足日時:2010/07/06 19:51
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!