今、正規表現を使って、HTML文章中の改行コードを、BRに置き換える処理をPHPにて実装しています。
が、この方法がわかりません。
最初は単純に改行コードをBRタグに置き換えればよいと思っていたのですが、、
この方法だと、HTMLタグ中に入っていた改行コードもBRに置き換えられてしまい。
例えば
<img src="xxx" ¥n alt="xxx">
が
<img src="xxx" <br> alt="xxx">
になってしまいます。
正規表現を使えば、タグの中の改行コード以外をBRに置き換えるという処理ができそうなのですが、処理方法がわかりません。
割と普通に使われそうな感じだったので、ググッて見たのですが、解りませんでした。
*ここは確認しましたが、これだけでは理解できませんでした。
http://www.din.or.jp/~ohzaki/perl.htm#HTML_Tag
具体的なコードを示していただけるととても助かります。
$replaced = preg_replace ('/(((<(["\'][^"\']*["\']|[^>])*>).*?)\n|\n)/', '$2<br>', $html) ;
これでは?
これでいけませんかね。
$replaced = preg_replace ('/(<[^>]+?>)|\n/', '$1<br>', $html) ;
ご回答、ありがとうございます。
さっそく試してみます。
【追記】
試してみました。
大体の場合で大丈夫そうですが。
'や"の中に>が含まれている場合は、やはりダメなようでした。
http://www.din.or.jp/~ohzaki/perl.htm#HTML_Tag
のURLにその判定方法があるみたいなんですが、、
ちょっと考えて見ます。
$replaced = preg_replace ('/((<("[^"]*"|[^>])*>)?.*?)\n/', '$1<br>', $html) ;
これで、どうでしょうか?
ありがとうございます。
これで、'や"の中に>が含まれている場合にもきちんと対応できました^^
でも、まだ一つ問題がありました。
「>」が最後に来ている文字列に置き換えを行った場合、そのタグの中の¥nは
になってしまうようです。
例えば、こんな場合にうまく行きません。
$html = '<strong>あいうえお</strong¥n>';
他にも試してみたところ、これもダメでした。
$html = '<strong>あいうえお</strong¥n>\n\n\n\n\n';
でもこれだとOKです。
$html = '<strong>あいうえお</strong¥n>\n\n\n\n\nかきくけこ';
とはいえ、実際に上記のようなケースに当てはまることはけっこうレアな気がします。。
$replaced = preg_replace ('/(((<(["\'][^"\']*["\']|[^>])*>).*?)\n|\n)/', '$2<br>', $html) ;
これでは?
ありがとうございます。
でもやはり、
$html = '<strong>あいうえお</strong¥n>';
がうまくいきませんでした。
それと先ほどの返信、
$html = '<strong>あいうえお</strong¥n>\n\n\n\n\n';
がうまく行かないのは嘘でした、末端の改行をトリム処理しているのをすっかり忘れておりました。
ありがとうございます。
でもやはり、
$html = '<strong>あいうえお</strong¥n>';
がうまくいきませんでした。
それと先ほどの返信、
$html = '<strong>あいうえお</strong¥n>\n\n\n\n\n';
がうまく行かないのは嘘でした、末端の改行をトリム処理しているのをすっかり忘れておりました。