• 締切済み

正規表現による特定部分の置換

次のようなテキストで、 <a href="#">リンク</a> \t<a href="#">リンク</a> 「\t」で始まる行の「<」「>」のみ「&lt;」「&gt;」に変換したいのですが、うまくいきません。 結果としてはこうなります。 <a href="#">リンク</a> \t&lt;a href="#"&gt;リンク&lt;/a&gt; preg_replaceを使うとして、どうマッチさせればいいのでしょう?

みんなの回答

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

#2でやってるのは単純な置き換えだからstr_replaceの方がいいかも arrayの部分は、ループの外に出して変数にした方がいいかも # if(substr($data1,0,1)=="\t"){ $data1=str_replace(array("<",">"),array("&lt;","&gt;"),$data1); }

randman
質問者

補足

行ごとに分解してから置換すると。それもひとつの手ですね。 でも、できれば、ひとつの正規表現で処理したいのです。preg_replace_callbackとかも×。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

if(substr($data,0,1)=="\t"){ $data=preg_replace("/</","&lt;",$data); $data=preg_replace("/>/","&gt;",$data); } ではダメですか

回答No.1

実験環境がないので良くわからないのですが、 perl なら s/^(\t.*)<(.*$)/$1&lt;$2>/gee s/^(\t.*)>(.*$)/$1&gt;$2>/gee とか s/(?<=^\t.*)</&lt;/gee s/(?<=^\t.*)>/&gt;/gee みたいなことができないでしょうか?

randman
質問者

お礼

最初のは、全部の<>が変換されず、 2番目のは、コンパイルエラーが出てしまいました。 うーん何でだろ?

関連するQ&A