- 締切済み
タグの中の改行文字を正規表現で削除したい
たとえば、 <a href="~" target="_blank"> というタグの中の改行文字(\n)を削除する正規表現を教えてください。 ただし、preg_replace_callbackは使わないでください。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- orc-orca
- ベストアンサー率68% (15/22)
一度にやろうとするからむずかしいのでしょう. ・ #1で全部改行を消す. ・ "/>"を "/>\n/" で置換 でいいのでは? 1度の正規表現で行ないたいということならダメでしょうけど.
- yambejp
- ベストアンサー率51% (3827/7415)
連続している文字列内の一部であるという仕様さえ 書かずに、回答に対して「質問をよくよめ」 といわれてしまうのは心外なので、いくつか 案はあるのですが本件について私は回答を差し控えます。
補足
「タグの中」といった時点で「連続した文字列」であることは明白です。第一、サンプルの文字列が全てであれば、正規表現を使う必要はありません。str_replaceで十分です。 もう一度質問を読んでみてください。
- yambejp
- ベストアンサー率51% (3827/7415)
$html="<a\nhref=\"#\"\ntarget=\"_blank\">"; $html=preg_replace('/\n/i','',$html); ですが、そのままだと返って来るデータは 「<ahref="#"target="_blank">」という つながったデータになります。 とりあえずは単純にスペースと置換するので 良いと思いますけど。 $html=preg_replace('/\n/i',' ',$html); ちなみに改行は使用環境によって異なりますので \rもはずす必要があるかもしれません。 よく検討してください
補足
スペースがつながってしまうのは気にしないでください。投稿時に削除されてしまったようです。また、改行文字も\nで統一済みです。 ご提案のパターン'/\n/i'ですが、これではタグ外の改行も削除されてしまいますので、質問の要件を満たせません。iも不要です。質問をもう一度読んでみてください。
補足
一度でなければ、preg_replace_callbackを使います。 つまり、この質問は純粋に正規表現の勉強のためにさせてもらっています。 全ての改行を削除してはいけません。タグの外の改行まで削除されてしまいます。あくまでタグの中だけです。 また、"/>"ですが、これは"/>/"でしょうか?