• 締切済み

正規表現で指定範囲すべて除去する方法

正規表現で {○○○○}の中を全て除去する場合 echo preg_replace('/{.*?}/', '', $html); で{ 文字は除去できる }の中が全て文字だけの場合は除去できるのですが、 { <div>タグを含むと除去できないので困っています</div> }とすると echoした場合に{ <div>タグを含むと文字も除去できな、すべて表示</div> }はそれごとすべてHTML表示されます。 { }内の{}やタグ、文字を全て除去する正規表現はどうすればよいのでしょうか? --------------------------------------------------- $html= <<<_EOD_ <HTML> <HEAD> <title>ここにページタイトルを記述する</title> </HEAD> <BODY> <p>ここの文章は表示する</p> { <div>ここにエリアは表示しない</div> } </BODY> </HTML> _EOD_; echo preg_replace('/{.*?}/', '', $html); -------------------------------------------------------------

  • PHP
  • 回答数1
  • ありがとう数0

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

中括弧は特別な意味を持つ場合が多いのでエスケープしてみては? echo preg_replace('/\{.*?\}/', '', $html);

関連するQ&A

  • 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
  • 正しい正規表現を教えてください

    お世話になります。 正規表現で次のように指定しているのですが、正確か自信がありませんので 正しい表記を教えてください。 1.全てのHTMLタグ <.*?> 2.「2012.1.1」または「2012.01.01」のような数字の羅列 (\d{4}).(\d{1,2}).(\d{1,2}) 3.「<img src="~」から始まる部分 <img src=" 4.「<div class="release">」を含む部分 <div class="release"> 5.HTMLタグと文字全て ^.*$ 全て色々なサイトで調べて表記したのですが、処理に時間がかかってて間違っている気がします。 yahoo!pipesのregexモジュールの部分で使用していて、デバッガーのTime takenに時間がかかっている場合、正しくない正規表現が原因らしいのです。 どうぞ宜しくお願いします。

    • ベストアンサー
    • PHP
  • preg_replaceでの正規表現による空行削除

    <p>タグ部分だけを抜き出し除去したhtmlを出力表示したのですが、 HTMLソース内に<p>タグを抜き出した部分に3行づつ空白があきます。 どうしても解決できません。助けて下さい。 ちなみに、<p>ではなくHTMLコメントタグとして <!--ここから-->タグか文章<!--ここまで-->と表現する場合も教えて下さい。 ---------------------------------------------------- $contents = <<<_HTML_ <div>DIVエリア/NO.1 <h1>1行目のH1タグ</h1> <h2>2行目のH2タグ</h2> <h3>3行目のH3タグ</h3> <p>4行目Pタグ</p> <p>5行目Pタグ</p> <p>6行目Pタグ</p> </div> <div>DIVエリア/NO.2 <h1>1行目のH1タグ</h1> <h2>2行目のH2タグ</h2> <h3>3行目のH3タグ</h3> <p>4行目Pタグ</p> <p>5行目Pタグ</p> <p>6行目Pタグ</p> </div> _HTML_; echo preg_replace(\'!<p>.*?</p>\\n*!i\', \'\', $contents); -----------------------------------------------------

    • ベストアンサー
    • PHP
  • 正規表現で特定のタグを除去・削除する方法を教えてください。

    正規表現で特定のタグを除去・削除する方法を教えてください。 actionscript3で正規表現を使いタグを除去したり削除したりしようとしたのですが うまく行きませんでした。 タグ削除で考えた方法1 str.replace(/<input (.*)\">/g,''); すり抜けて最後のエレメントまで消滅しました('A`) タグ削除で考えた方法2 str.replace(/<input([a-zA-Z0-9\.\:\/\s]*))\">/g,''); 何も起こらない('A`) タグ削除で考えた方法3 str.replace(<option value=([a-zA-Z0-9]+|[\.\:\/\s]+)>([一-龠]+|[ぁ-ん]+|[ァ -ヴー]+|[a-zA-Z0-9]+|[a-zA-Z0-9]+)<\/option>); 何も起こらない('A`) 除去に至っては手付かずです。 タグ削除の方法が分かれば元のコンテンツを参照させて うまく行きそうだなと思いました。 ポイントとして属性などを一つ一つ記入する手間を省きたいです 何方かレクチャーしていただけますか。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • 正規表現の読み方

    /{(.+?)}/e この正規表現はどのような意味でしょうか? 下記のようなプログラム(テンプレートエンジン)に使われています display('index.html', $prm); function display($tpl, $prm) { $html = file_get_contents($tpl); $html = preg_replace('/{(.+?)}/e', '$prm[\'$1\']', $html); echo $html; }

    • ベストアンサー
    • PHP
  • Java正規表現-"ある文字列"を含まない文字列

    Javaの正規表現で、HTMLタグ以外の文字列を抽出しようとしています。 HTMLタグはの正規表現は"(</?.*>)"のように表しました。これの否定をしたいのですが、方法を教えて下さい。HTMLタグ以外にヒットさせたいです。 一応、現段階のソースを載せます。 import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; public class HTMLInnerGetter { public static void main(String[] args){ String regex = "(</?.*>)"; String target = "<html><head><title>title</title></head><body><h1>head1<br><p>pragraph</p></body></html>"; ArrayList<String> innerHTMLs = new ArrayList<String>(); Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(target); while(matcher.find()){ innerHTMLs.add(matcher.group(1)); } System.out.println(innerHTMLs); } } 出力結果 [<html><head><title>title</title></head><body><h1>head1<br><p>pragraph</p></body></html>] ※否定できなかったので、HTMLタグがヒットしています。

    • ベストアンサー
    • Java
  • 正規表現でHTMLを変換したい

    HTMLファイルの特定のタグだけを分析して、独自の形に変換したいと思っています。 $html = preg_replace('/<div( [^>]*)?>(?!.*<div[^>]*)(.*?)<\/div>/is', '<div2 \1 value='\2' />', $html); 例えばこんな風にdivタグを分析すればある程度欲しいデータは取得する事が出来るのですが、 ただ単にこれだけだと、一番最後に出てくる一番深いdiv要素の所しか取得出来ません。 うまい事divの組合せ全てを変換する方法は無い物でしょうか

    • ベストアンサー
    • PHP
  • エスケープ文字そのものにマッチさせる正規表現

     お世話になっております。  PHPの正規表現でエスケープ文字\そのものにマッチさせる正規表現がなかなか作れません。Perl互換のpreg_replaceなども試してみましたがダメでした。エスケープ文字そのものを削除したいのですが、どうしたらよいでしょうか? $value = ereg_replace ('\\', '', $value);//ダメでした。 $value = preg_replace ('/\\/', '', $value);//同様にダメでした。 $value = preg_replace ('/[\\]/', '', $value);//同様にダメでした。  文字列中に\が入っていたり、単独で\があった場合は必要ないので削除するといった感じです。 $value = ereg_replace ('[][}}{)(!"#$%&\\~|*+,/\^\'<>`;:?\\=]', '', $value); これでいけるかと思ったのですが、\だけ残ってしまいます。最後辺りの\\で\文字それ自体にマッチするかと思うんですが…。 わかる方がいらしたらおしえてください。よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPでHTMLファイル置換 プログラムについて

    以下のプログラムを書きました。 あるHTMLファイルをテンプレートとし、 中に記述している置換文字列を動的に 表示させるというものです。 しかしなかなか表示されません。 どこがおかしいのでしょうか? --template.html-- <html><head><title>test</title></head> <body> 表題 他いろいろ <!-- data replace --> フッター いろいろ </body></html> --index.php-- $page_lines = File("template.html"); $all_lines=''; foreach( $page_lines as $line ){  $all_lines .= $line; } $str = "<div>出力用データいろいろ</div>"; print preg_replace(/<!-- data replace -->/,$str, $all_lines); 以上です。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPで正規表現を使った対象データを全て取り出した

    PHPで正規表現を使った対象データを全て取り出したいのですが、 echo ($matches); にしても「Array」しかでないし、、 var_dump($matches); で確認しても意図するものが取れておりません。。 正規表現で取りだしたい箇所は hrefの「100065」と「100066」です。 これはテスト用に作っているので2個ですが、本来は 30個程度対象箇所があります。 何か正規表現の記述が間違っていると思いますが、ご指摘願います。。 ・プログラム preg_match_all( "(/abcNo=(.*?)&ckFlg/)", $_getHTML, $matches); var_dump($matches); ・var_dumpしたブラウザの表示内容 array(2) { [0]=> array(0) { } [1]=> array(0) { } } 補足: $_getHTML は既にダミーで用意したHTMLを読み込んだものです。 $_getHTML で読み込んでいるファイルの中身です。 <html> <body> <a href="abcNo=100065&ckFlg=1"></a> <a href="abcNo=100066&ckFlg=1"></a> </body> </html>

    • ベストアンサー
    • PHP

専門家に質問してみよう