• ベストアンサー

preg_replace() で特定の文字の後から処理させたい

preg_replace()でhtmlデータが入っている変数を扱っているのですが、ヘッダーを無視して<body>からその作業を開始させるということは可能でしょうか? $data = stristr($data, </head>); $data = preg_replace($pattern, $change, $data); としてしまうとヘッダーを削除してしまいます。 何か良い方法をご存知の方おられましたらどうぞよろしくお願いいたします。

  • jyuu
  • お礼率83% (553/665)
  • PHP
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • karace
  • ベストアンサー率45% (9/20)
回答No.1

一度head側とbody側に分けて保持しておくというのはどうでしょうか? <?php # htmlデータ $data = <<<EOF <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"/> <title>教えて!goo preg_replace() で特定の文字の後から処理させたい</title> </head> <body> てすとhtml </body> </html> EOF; # "てすと" を "あいうえお" に置換する準備 $pattern = '/てすと/'; $change = 'あいうえお'; # </head>終了タグを境に2つに分ける $data = preg_split('/<\/head>/',$data,2); # <head>ではない方を置換処理 $data[1] = preg_replace($pattern, $change, $data[1]); # </head>で繋いで出力 print $data[0].'</head>'.$data[1]; ?>

jyuu
質問者

お礼

ありがとうございます。大変参考になります。

その他の回答 (1)

  • karace
  • ベストアンサー率45% (9/20)
回答No.2

No.1の者です。 見落としてました。 > ~<body>からその作業を開始させるということは可能でしょうか? ということなので、No.1のサンプルコードは</head>→<body>にした方がより良いかもしれないです。

jyuu
質問者

お礼

補足していただき感謝します。

関連するQ&A

  • preg_replace, ereg_replace

    $bodyにはテキストファイルなどから読み込んだ、$dateと言う文字(変数ではない)と、改行を含む文字列。 それで、「$date」を、phpスクリプト上の$dateの値に置換したく、 $tmp = preg_replace("/\$date/s", $date, $body); または、 $tmp = ereg_replace("\$date",$date,$body); としたのですが、どうも置換されません。何がいけないのでしょうか?

    • ベストアンサー
    • 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
  • 文字列の中の特定部分とそうでない部分とで処理を分けたい

    文字列中で、<test>~</test>で囲まれた部分と、囲まれてない部分とで処理を分けたいです。 そして、分けて処理したあとに、くっつけたいです。 abcdEFG <test> ABCDEFG </test> hiJKLmn ↓ 例えば、<test>で囲まれた部分は小文字に変換、囲まれていない部分は大文字に変換という処理であれば以下のようにしたいのです。 ABCDEFG <test> abcdefg </test> HIJKLMN 扱う文字列は、UTF-8で複数行です。 自分でとりあえず動作するコードは作成してはみたものの、、、 あまりスマートとはいえないと感じていて、もっといい方法があればご教示お願いしたいです。。。 1.文字列Aの中から、<test>で囲まれた部分をpreg_match_all()で取得し、変数Aに格納。 2.変数Aに処理を加え、変数Bに代入。 3.preg_replace()で文字列Aの中の、変数A部分を変数Bに置換。 4.文字列Aを、<test>で囲まれた部分をキーとしてpreg_split()で分解し、変数Aに格納。 5.変数Aに処理を加え、変数Bに代入。 6.preg_replace()で文字列Aの中の、変数A部分を変数Bに置換。   $pre1 = array();   $pre2 = array();   preg_match_all("/<test>((.|\r\n|\n)*?)<\/test>/u", $p_string, $pre1);   for ( $x = 0; $x < count($pre1[0]); $x++ ) {     # $pre1[0]ではなく$pre1[1]としてるのは<test>タグを含めないため     $pre2[$x] = $pre1[1][$x];     # hoge*()は処理     $pre2[$x] = hoge2( $pre2[$x] );     $pre2[$x] = hoge4( $pre2[$x] );     # <test>タグを戻して、置換後の文字列完成・・・(1)     $pre2[$x] = '<test>'.$pre2[$x].'</test>';     # 置換パターン・・・(2)     $pre1[0][$x] = "/" . preg_quote($pre1[0][$x], "/") . "/u";   }   # 文字列から、(2)置換パターンを探して、(1)置換後文字列に置き換え   $p_string = preg_replace( $pre1[0], $pre2, $p_string );   $pre1 = array();   $pre2 = array();   $pre1 = preg_split("/<test>(.|\r\n|\n)*?<\/test>/u", $p_string, -1, PREG_SPLIT_NO_EMPTY);   for ( $x = 0; $x < count($pre1); $x++ ) {     $pre2[$x] = $pre1[$x];     # hoge*()は処理     $pre2[$x] = hoge1( $pre2[$x] );     $pre2[$x] = hoge2( $pre2[$x] );     $pre2[$x] = hoge3( $pre2[$x] );     # 置換後の文字列完成・・・(3)     $pre2[$x] = hoge4( $pre2[$x] );     # 置換パターン・・・(4)     $pre1[$x] = "/" . preg_quote($pre1[$x], "/") . "/u";   }   # 文字列から、(4)置換パターンを探して、(3)置換後文字列に置き換え   $p_string = preg_replace( $pre1, $pre2, $p_string );   # 最後に<test>タグを削除する   $p_string = preg_replace( "/<test>((.|\r\n|\n)*?)<\/test>/u", $1, $p_string );

    • ベストアンサー
    • PHP
  • preg_replace_callback が渡す変数の扱い

    preg_replcace_callback を使用して、<a>タグ内のURLの字数を制御するコードに取り組んでいます。詳しい方アドバイスしてくださると助かります。 下のコードの、shorten(カスタム関数)に渡されるデータが配列なのですが、並列に並んだ配列のようなのです。echo をかけてみると、ArrayArray と表示されます。しかし、Array([0]=>Array [1]=>Array) ではないので、どうやって 処理をかけて return すればよいのか途方にくれています。 もしよい方法をご存知の方おられましたらどうぞよろしくお願いいたします。 <? $str = <<<HERE //長いURLのサンプルです。ここの掲示板の処理で途中で表示がカットされていますが、<a href="http://長いURL">http://長いURL</a>という構成になっています。 <a href="http://gooooooooooooooooooooooooooooooooooogle.co.jp">http://gooooooooooooooooooooooooooooooooooogle.co.jp[</a> <a href="http://yahooooooooooooooooooooooooooooooooooo.co.jp">http://yahooooooooooooooooooooooooooooooooooo.co.jp</a> HERE; $pattern = "#<a(.*?)>(.*?)<\/a>#s"; $str = preg_replace_callback($pattern, 'shorten', $str); echo $str; function shorten($matches) { foreach($matches as $index => $match) { if (strlen($match) > 20) { $matches[$index] = substr($match, 0, 20) . '....'; } } return $matches; } ?>

    • ベストアンサー
    • PHP
  • htmlタグを削除させて表示させたい

    特定の変数内にある、htmlタグを削除させて表示させたいのですが、reg_replace()を使うのが妥当でしょうか? その際、<br>や<img ="http=~">といった< >内が変化する文字を指定するのがわからなくて困っています。 <?php $string = 'こんにちは、<br>皆さん.'; $pattern = '/<br>/'; $replacement = ''; echo preg_replace($pattern, $replacement, $string); ?> この</br/>の部分を</*/>としてみましたが見当違いのようで"皆さん"の部分がすっぽ抜けてしまいました。 もしご存知の方おられましたら、どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 特定の文字を抽出

    http://oshiete1.goo.ne.jp/qa2050546.html に似たような質問を見つけましたが、マニュアルで正規表現関数という項目をよんでも何のために使用するのかよくわかりませんでした。 そこで、 $data = "<html><head></head><body>こんにちは</body><html>"; echo $data; このような場合、「こんにちは」を抽出して $data2に当てはめることは可能でしょうか? ご存知の方おられましたらどうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • preg_match と正規表現 で URL抽出

    HTMLのデータが入っている変数 $data から、一番初めにでてきた<img>タグに囲まれるURLと、そこに<a>タグがある場合はそのリンク先のURLを取得させたいのですが、もし<a>のない場合のケースでどう条件付ければよいかわからず、困っています。 <? $data = "<html><head></head><body>こんにちは、元気ですか? <a href=\"http://www.hoge.co.jp\"><img=\"http://www.hoge.co.jp/hoge.jpg\"></a> <img=\"http://www.hoge02.co.jp/hoge02.jpg\"> </body></html>"; if (preg_match("#<a href=\"(.+)\"><img=\"(.+)\"></a>#", $txt, $reg)){ $link = $reg[1]; $url = $reg[2]; } echo "URL = {$url}<br> LINK = {$link}"; ?> この場合、一番初めに出てきた hoge.jpg のURLとLINK両方取得してくれますが、もし hoge02.jpg が先に来た場合、そのURLを取得させるようにしたいのですが可能でしょうか? もし何かご存知の方おられましたらどうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 文字列内にある「指定した空タグ」だけを削除したい

    文字列内にある「指定した空タグ」だけを削除するにはどうすれば良いでしょうか? ※HTMLタグはエスケープしていない状態で、変数として保持しています ■現状 <p>str_replaceでいけると思ったけど</p> <p></p> <p>preg_replace?</p> <p></p> ■希望 <p>str_replaceでいけると思ったけど</p> <p>preg_replace?</p>

    • ベストアンサー
    • PHP
  • 正規表現で、指定文字から指定文字までを削除したい

    <div class="post-image-border">○○○○</div> をタグ毎削除したいのですが、どうすればよいでしょうか? $data = preg_replace("#\<div class=\"post-image-border\"\>.*\<\/div\>#","",$data); とやってみたのですが、うまくいきませんでした

    • ベストアンサー
    • PHP
  • ある文字列から特定のタグとその中身を削除する方法について教えてください

    ある文字列から特定のタグとその中身を削除する方法について教えてください。 PHP4.3.9を使って作業する予定でスキルアップをしています。 表題の件について、教えていただければと存じます。 例えば、下記の文字列があるとします。  "あ<b>いいいい</b>う<b>ええええええええ</b>お" この<b>タグに囲まれた文字だけを削除して、"あうお"という文字を取得したいのです。 preg_replace関数、mb_ereg_replace関数を使えば出来そうな予感はするのですが 恥ずかしながら正規表現の書き方が分からず、やりたいことが実現できておりません。 これらの関数に限らず、簡単に実現できる方法があればご教授いただけないでしょうか。 以上、宜しくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう