• 締切済み

preg_matchで指定ファイルのタグを抽出?

preg_matchを使って指定したファイルのタグを抽出するにはどうしたらいいのでしょうか? 例えば、 <title>●●</title> の●●を抜き出すにはどうすれば良いのでしょうか? ご回答よろしくお願いいたします。

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

みんなの回答

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

先読み・戻り読みをつかえば0番目の要素でマッチできます <?php $pattern= "/(?<=<(title)>).*?(?=<\/\\1>)/i"; $str = "<html>\n<head>\n<title>テスト</title>\n</head>"; preg_match($pattern,$str,$matches); print $matches[0]; ?>

回答No.1

完璧ではありませんがこんな感じで <?php $pattern= "/<title>(.*?)<\/title>/u"; $subject = "<title>●●●</title>"; preg_match($pattern,$subject,$matches); print_r($matches); ?>

関連するQ&A

  • PHP4で、preg_replace、preg_matchが使えません。

    PHP4を、インストールしました。 ライセンスは問題なく表示されます。 PEAR.phpなどライブラリが一切読み込めないようです。 また、 preg_replace、preg_matchが使えません。

    • ベストアンサー
    • PHP
  • preg_matchと定数について

    preg_matchと定数について $string = "○○ドメイン"; if (preg_match("/$string/", $_SERVER['SERVER_NAME'])) {  echo "○"; } else {  echo "✕"; とやると○になるのですが、 define("DOMAIN", "○○ドメイン"); if (preg_match("/DOMAIN/", $_SERVER['SERVER_NAME'])) {  echo "○"; } else {  echo "✕"; } とすると、✕になります。 なぜでしょうか?

    • ベストアンサー
    • PHP
  • preg_matchについて

    初級者です。 初歩的な質問で申し訳ないですが質問させていただきます。 データベースのテーブルにある日付にマッチすれば"マッチ"、マッチしなければ"マッチなし"と表示させたく思っております。 ~DB内任意のフォームデータ~ 0405 0406 0407 ・ ・ ~~~~~~~~~~~~~~ そこで下記のスクリプトを作ったのですが、 この方法だとDBに登録されている日付の分だけ "マッチ" "マッチなし" ・ ・ と表示されてしまします。 ==test.php== <? //$keydayはリクエストのあった日付Ymd形式 //getRecList()に関しては別ファイルにてfunction済み //["日付"]というのは上記DBの日付の項目名 $reclist = getRecList(); foreach ($reclist as $rec) { $matchday = (date_format("Ymd",$rec["日付"])); unset($found); $found[0]=1; $matchecho ="マッチ"; $unmatchecho="マッチなし"; ?> <? if (preg_match("/$keyday/",$matchday)) { ?>  <? if (!array_key_exists($matchecho,$found)) { ?>   <? echo $matchecho ?><? $found[$matchecho] = 1; ?>  <? } ?> <? } else { ?>  <? if (!array_key_exists($unmatchecho,$found)) { ?>   <? echo $unmatchecho ?><? $found[$unmatchecho] = 1; ?>  <? } ?> <? } ?> <? } ?> ?> ======== やりたい事は、 DBに登録されている日付の数に左右されずマッチする日付があったら1回だけ"マッチ"と表示、 待ちしなければ1回だけ"マッチなし"と表示させたいのです。 ・・なんかforeachで回している事自体が間違いな気がしますが、どうかよろしくお願いいたします。

    • 締切済み
    • PHP
  • タグ内容の抽出方法

    htmlファイルが約50000ファイルほどあります。 この中からタグの内容を抽出したいと考えています。 例えば 指定フォルダ以下のhtmlファイル内の <title>を検索条件とした場合 <title>○○○1</title> <title>○○○2</title> <title>○○○3</title> ・ ・ ・ といったようにリスト出力してくれるようなフリーソフトや 出力方法をご教示ください。 単純作業ですが手動でやるのは気が遠くなります。 お知恵を貸していただけると幸いです。

  • preg_replaceでタグだけ置換

    HTMLのタグを別のタグに置換しようとしています。 HTML中に複数ある<a></a>タグ <a href="/w/index.php?title=%E3%83%95%E3%82%B0%E3%83%AA%E3%83%BC%E5%B7%9D&amp;action=edit" class="new" title="フグリー川">フグリー川</a>など という文字列の<a></a>タグを<span style="color:#ff0000;"></span>に置換したいのです。 $pattern = '|<a href="/w/index\.php\?title=.*?">(.*)</a>|'; $replace = '<span style="color:#ff0000 ;">\\1</span>'; preg_replace( $pattern, $replace, $html, -1, $count); print $count; $countの表示は 1 でした。上記のような<a>タグは複数あるのに。 上記のような<a>タグをマッチさせるにはどうパターン表記したらいいでしょうか? PHP5.2.4です。 ご教授お願いします。

    • ベストアンサー
    • PHP
  • preg_matchでのマッチが正しくされない

    メールヘッダを解析して処理させるプログラムを作成しています。 ヘッダから件名を取得するために以下のコードを記述しました。 $head = 'Return-Path: Delivered-To: hoge@hogehoge.com Received: from docomo.ne.jp (mail102.docomo.ne.jp [203.138.203.2]) by www.hogehoge.com (Postfix) with ESMTP id C73904003B for ; Fri, 25 Mar 2011 16:32:19 +0900 (JST) Date: Fri, 25 Mar 2011 16:32:24 +0900 (JST) From: huga@hogehoge.com To: hoge@hogehoge.com Subject: =?iso-2022-jp?B?GyRCJFskMiRbJDIkVSQsJFUkLBsoQg==?=hogehogehugahuga =?iso-2022-jp?B?GyRCJFskMiRbJDIkVSQsJFUkLBsoQg==?= Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset="iso-2022-jp" Content-Transfer-Encoding: 7bit X-Virus-Scanned: clamav-milter 0.96.3 at MCN X-Virus-Status: Clean' $ptrn = '/Subject:([\s\t]*=\?iso-2022-jp\?[BQ]\?([^\?]+)\?=)+.* Message\-ID/i'; preg_match($ptrn, $head, $regs); var_dump(regs[0]); $headに別関数で取得したメールのヘッダ情報、$ptrnに正規表現での一致条件を書き出しました。 PHPの正規表現チェッカーでは正常にマッチしたのですが、preg_matchで動作させるとマッチしてくれません。 何がまずいのでしょうか? 正しくマッチさせる方法をご回答お願いします。

    • ベストアンサー
    • PHP
  • preg_matchによるカタカナチェックについて

    preg_matchによるカタカナチェックについて 宜しくお願い致します。 PHPのバージョン:4.4.1 文字コード:euc-jp preg_matchでカタカナのみ入力されているかをチェックしたいと思っております。 下記の様な感じで作ったのですが、ひらがなもスルーになってしまいます。 //会社名【カナ】の適合チェック if(preg_match("/[^ァ-ヶー]+/",$hoge_kana)) { print "カタカナ以外が含まれます"; } どうすればカタカナ以外が含まれた場合にチェックできるのでしょうか?

    • ベストアンサー
    • PHP
  • PHPの正規表現「preg_match」で漢字を含む場合のマッチパター

    PHPの正規表現「preg_match」で漢字を含む場合のマッチパターンについて 宜しくお願い致します。 preg_matchを使っての正規表現で、「あいうえおかきくけこ3月10日さしすせそ」という文字列から「3月10日」だけを抽出するには、どういうパターンが良いのでしょうか? 下記の様にやってみましたが、だめでした。。。 preg_match("/\d{1,2}[月]\d{1,2}[日]/",$hoge,$match) これではうまくいきません。 どなたかお助けくださいー!

    • ベストアンサー
    • PHP
  • preg_matchの正規表現

    PHPの掲示板でemailアドレス(携帯のemailも含む)を投稿できないようにpreg_matchする正規表現を教えてください。

    • ベストアンサー
    • PHP
  • phpのHTMLからのRSS linkタグ抽出

    こんにちは phpを使ってrssを配信している サイトのhtmlデータを取得し、 rssのリンクが書いてある<link>タグを抽出しようとしています。 preg_matchなどを使った抽出の時に使っている正規表現は一応、 |.*<link rel=[\"\']alternate[\"\'](.*rss.*xml.*)?>|s なのですが、上記のrss xmlという文字列の順序や、 rssのバージョンを考えずに取得できる方法、 タグ内の他の属性値、属性値の順序など、 人によって書き方が異なり、 取得が難しいです。 これ以外の、より簡単な取得方法や、抽出におけるよい正規表現を知っておられる方、 どうか抽出方法を教えていただけませんでしょうか?

専門家に質問してみよう