• ベストアンサー

あるタグに囲まれた文字以外を対象に置換

"あるタグ"というのはコメントアウトのことです。 以下のような変数があります。 $string = <<<EOF テスト1行目 <!--START--> テスト2行目 テスト3行目 <!--END--> テスト4行目 <!--START--> テスト5行目 テスト6行目 <!--END--> EOF; このうち<!--START-->から<!--END-->に囲まれている以外の「テスト」を全て「test」に置き換えたく思います。 これを正規表現を使い実現できるでしょうか? またコメントアウトの内外にかかわらず、$stringの中には様々なタグや改行が含まれます。 説明が下手で申し訳ないですが、ご教示いただけると大変助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • masaota56
  • ベストアンサー率41% (58/139)
回答No.2

横から失礼します。 フラグを設定します。 $flag=1; 1行ずつ処理をするループの中で、  <!--START-->が見つかれば $flag=0;  <!--END-->が見つかれば $flag=1;  $flag==1なら   「テスト」を「test」に置き換え でいかがでしょうか。   

yugo042
質問者

お礼

ご回答ありがとうございます。 ループして一行ずつ評価する方法ははじめ私も思い付きました。 しかし行数も多く、頻繁に実行される処理なので、正規表現で一気に置換出来ればと思い質問させて頂きました。後出し情報で申し訳ないです。 それか、そもそも負荷について考えが過敏すぎるのでしょうか…。 他に実現方法がなければ、ループ処理でやろうと思います。ご回答ありがとうございました。

その他の回答 (1)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

一個の正規表現で片付けるとか無茶なことは考えないで、 置換対象にしたいところだけ切り出す手順と、 実際に置換を行う手順を組み合わせたらどうでしょう?

yugo042
質問者

お礼

ご回答ありがとうございます。 ご説明頂いた通り、処理を分けて行おうと思います。 その場合ですがよろしければ、どういった関数を使えばいい、もしくは大まかな流れなど簡単に教えて頂けないでしょうか。 善意に甘えるような形で申し訳ないですが、よろしければお願いいたします。

関連するQ&A