- 締切済み
正規表現による特定部分の置換
次のようなテキストで、 <a href="#">リンク</a> \t<a href="#">リンク</a> 「\t」で始まる行の「<」「>」のみ「<」「>」に変換したいのですが、うまくいきません。 結果としてはこうなります。 <a href="#">リンク</a> \t<a href="#">リンク</a> preg_replaceを使うとして、どうマッチさせればいいのでしょう?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
回答No.3
#2でやってるのは単純な置き換えだからstr_replaceの方がいいかも arrayの部分は、ループの外に出して変数にした方がいいかも # if(substr($data1,0,1)=="\t"){ $data1=str_replace(array("<",">"),array("<",">"),$data1); }
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
回答No.2
if(substr($data,0,1)=="\t"){ $data=preg_replace("/</","<",$data); $data=preg_replace("/>/",">",$data); } ではダメですか
- seta_takahiro
- ベストアンサー率60% (23/38)
回答No.1
実験環境がないので良くわからないのですが、 perl なら s/^(\t.*)<(.*$)/$1<$2>/gee s/^(\t.*)>(.*$)/$1>$2>/gee とか s/(?<=^\t.*)</</gee s/(?<=^\t.*)>/>/gee みたいなことができないでしょうか?
質問者
お礼
最初のは、全部の<>が変換されず、 2番目のは、コンパイルエラーが出てしまいました。 うーん何でだろ?
補足
行ごとに分解してから置換すると。それもひとつの手ですね。 でも、できれば、ひとつの正規表現で処理したいのです。preg_replace_callbackとかも×。