- 締切済み
タグの中の改行文字を正規表現で削除したい
- みんなの回答 (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も不要です。質問をもう一度読んでみてください。
関連するQ&A
- 正規表現でpreg_系を使ってタグ内は置き換えないようにする方法
正規表現でpreg_系を使って、半角スペースを に置き換える処理をしたのですが、タグ内のスペースも&nbs;に置き換わってしましました。 タグ内は置き換えないようにするにはどのようにしたら良いでしょうか? データは複数行渡っています。以下はタグが置き換わるので、逆にタグでないものを置き換えたいです。 <?php function test_call($matches){ return str_replace(" "," ",$matches[0]); } $data = <<< EOT この横は変換 します。 <a href="http://www.yahoo.co.jp/" target="_blank">タグの半角スペースは変換せず、 この横は変換する。 </a> このタグも変換してはいけません。< br/> EOT; $data = preg_replace_callback('/<("[^"]*"|\'[^\']*\'|[^>])*>[ ]?/', "test_call", $data); var_dump($data); ?>
- ベストアンサー
- PHP
- 正規表現 URLのリンク
$value = 'http://www.google.co.jp http://www.google.co.jp'; $screen = substr($value, 0, 40); $strVal = preg_replace("/http.?:\/\/([0-9a-zA-Z\-\.!~\/?:;=+,%#_])+/","<a href=\"\\0\" target=\"_blank\">\\0</a>", $screen); echo $strVal; とした場合 <a href='http://www.google.co.jp'>http://www.google.co.jp</a> <a href='http://www.googl'>http://www.googl</a> となってしまうのですが、これを2つ目は切れているので、末尾でヒットした場合にはAタグは付けないようにしたいのですが、できますでしょうか?
- 締切済み
- PHP
- 正規表現でタグの一部を削除したい
Dreamweaverの検索および置換で正規表現を使用して、サイト内で使用されている<a>タグの中の「title=""」を削除したいです。どうぞよろしくお願いします。 例としては下記のような感じです。 【修正前】 <a title="ここは文字列が入っています" href="index.html" class="link">リンク文字</a> 【修正後】 <a href="index.html" class="link">リンク文字</a> 「title=""」の「””」に入っている文字列は同じ文字もありますが、基本的にすべて違います。 また、例では<a>タグの中に「href」「class」が入っていますが、リンク先が違ったり、class名が違ったり、「id」が入っていることもあります。
- ベストアンサー
- CSS
- 正規表現について
HTMLファイルを読み込み、特定の文字列にリンクを付けて出力したいのですが上手くいきません。 例: <img src="./seiki_hyougen.gif" alt="正規表現についての説明">更に正規表現を知りたい方は、<a href="special.html">正規表現の詳しい説明</a>をクリックして下さい。 ↓正規表現をキーワードにしてリンクを付けたい。 正:<img src="./seiki_hyougen.gif" alt="正規表現についての説明">更に<a href="seiki_hyougen.html">正規表現</a>を知りたい方は、<a href="special.html">正規表現の詳しい説明</a>をクリックして下さい。 誤:<img src="./seiki_hyougen.gif" alt="<a href="seiki_hyougen.html">正規表現</a>についての説明">更に<a href="seiki_hyougen.html">正規表現</a>を知りたい方は、<a href="special.html"><a href="seiki_hyougen.html">正規表現</a>の詳しい説明</a>をクリックして下さい。 尚、下記URLのサンプルを参考にしてスクリプトを作成しています。 http://php.oss.eznetsols.org/manual/ja/function.preg-split.php $r = preg_split('((\/a>)|(<a))', $html, -1, PREG_SPLIT_DELIM_CAPTURE); for ($i = 0; $i < count($r); $i++) { if ($r[$i] == "<a") { $i++; continue; } $r[$i] = preg_replace( "/(正規表現)/i", "<a href='seiki_hyougen.html'>\\1</a>", $r[$i] ); } return join("", $r); この(正規表現)の部分で上手い正規表現を使えばalt="×××"の中にリンクタグが入らないようにできるのでは?と思っているのですが・・・。 どうか、良い方法を教えて下さい。よろしくお願いいたします。
- ベストアンサー
- PHP
- phpでpreg_replaceで次のような条件の文字を置換したいのですが…
<a href="jump?url= *1 " target="_blank"> *2 </a> というAタグになっている文字列を *2 だけのテキストにしたいと思っています。 preg_replaceでの正規表現での条件がわかりません…。
- ベストアンサー
- PHP
- 正規表現でタグの中を除く文字をマッチングするには
正規表現でタグの中を除く文字をマッチングするしたいのですが 良い方法はありますでしょうか。 例えば <a>のタグの中にない、"あい"を"かき"に変換したい。 <a>あいうえお</a>あいうえお ↓ <a>あいうえお</a>かきうえお という様にしたいのです。 正規表現では向かない処理かも知れませんが、 良い書き方ありましたら教えてください。
- ベストアンサー
- Java
- PHP 正規表現改行したい
preg_match でHTMLタグを解析するために正規表現を組んでますが、正規表現部分が長すぎてソースがわかりづらいので機能に影響すること無く改行して見やすくする方法はありますか? もしくはHTMLのパースならこうした方がいいよ的アドバイスでも
- ベストアンサー
- PHP
- 正規表現について
すみませんが、教えてください。 PHP+MYSQLで掲示板のようなサイトを作っています。 投稿したコメントの中にURLがある場合、次の変換で、リンクを設定するようにしています。 $str = ereg_replace("(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)", "<a href=\"\\1\\2\" target=\"_blank\">\\1\\2</a>", $aStr); さらに、次のことがしたいのですが、どうすれば良いのか教えてください。 (1)URLが長い場合、表示する文字列を指定文字数でカットする。 (2)URLのみをリンク設定付で切り出す。 当方、正規表現がほとんど理解できていません。 (オイラリーの本を買ったのですが、時間がなくて学習できていません。) 申し訳ございませんが、こうすれば良いというコードを教えていただければ、幸いです。
- ベストアンサー
- PHP
- http://とhttps://のどちらでもマッチングできる正規表現
http://とhttps://のどちらでもマッチングできる正規表現の書き方が分かりません。aタグの中のhref="のあとのURL部分にhttpでもhttpsのどちらでもOKのマッチングをかけたいです。 具体的にはhttp://www.aaa.co.jpでもhttps://www.aaa.co.jpのどちらでもpreg_match_allでマッチングをかけたいです。 $count=preg_match_all("正規表現",$URL,$maches); という感じでhttpかhttpsのURLに引っ掛けたいです。 教えてください
- ベストアンサー
- PHP
- preg_replaceでの正規表現について
お世話になります。 ereg_replace で書いた正規表現による置換処理を、 preg_replace に置き換えようとしています。 (preg_replaceの方が処理が速いとマニュアルにあったので) ところが、preg_replaceでの正規表現検索がうまくいかないで困っています。 基本的には、ereg_replaceの正規表現部分を//で囲んでいるだけです。 具体的には、下記のような処理を書いています。 間違いがあれば、ご指摘いただけましたら幸いです。 //### うまくいっている ereg_replace のパターン ここから ### $html=file_get_contents('template/temple.html'); //ひな形読み込み $search='\{dokuji tag\}.+\{_dokuji tag\}'; $replace=''; $html=ereg_replace($search,$replace,$html); //不要部分の削除 //### うまくいっている ereg_replace のパターン ここまで ### ↓ //### うまくいかない preg_replace のパターン ここから ### $html=file_get_contents('template/temple.html'); //ひな形読み込み $search='/\{dokuji tag\}.+\{_dokuji tag\}/m'; $replace=''; $html=preg_replace($search,$replace,$html); //不要部分の削除 //### うまくいかない preg_replace のパターン ここまで ### //### 置き換えるソース('template/temple.html') ここから ### <!-- {dokuji tag} --> <tr> <td nowrap><strong>タイトル:</strong></td> <td> <input type="text" name="name" size="80" value="{name}" /> </td> </tr> <!-- {_dokuji tag} --> //### 置き換えるソース('template/temple.html') ここまで ### よろしくお願い申し上げます。
- ベストアンサー
- PHP
補足
一度でなければ、preg_replace_callbackを使います。 つまり、この質問は純粋に正規表現の勉強のためにさせてもらっています。 全ての改行を削除してはいけません。タグの外の改行まで削除されてしまいます。あくまでタグの中だけです。 また、"/>"ですが、これは"/>/"でしょうか?