• 締切済み

正規表現について教えてください

こんにちは。 PHPの正規表現を使用して、あるサイトのhtmlソースから特定のタグ間にある文字を抜き取りたいです。 例えば、下記の場合9を抜き取りたいです。 <div class="a">9</div> この場合の処理方法を教えてください。

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

みんなの回答

noname#93451
noname#93451
回答No.3

divタグの値9を取り除くなら、クラスではなくname属性が必要です。 クラスはCSSを指示していてdivタグの値を取り扱い出来ないです。なのでdivタグにname属性を付けたら良いです。

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

>初心者のため知識不足でしたがclassでタグの特定はできないのですか? classは同じページ内に複数設定が可能ですので、ユニークになりません。 すなわち複数あった場合1つだけを特定することはできません。 逆に複数設定されているものすべてを抜き出すことも可能です。 今回の件だとdivを抜き出せばいいのか、特定のclassを抜き出せばいいのか も書いておらず、質問としては情報不足を感じました

don23_2009
質問者

お礼

返事が遅くなり申し訳ありません。 丁寧な解説ありがとうございます。 同ページ内にあるclassすべてを抜き取りたいです。 class名はすべて同じで<div class="a">になります。 よろしくお願いします。

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

classではタグは特定できません。この手の処理は条件があいまいだと 回答はぶれます。きちんと考えてからにしてください。 単純に考えれば $pattern="/<div .*?class=\"a\".*?>(.*?)<\/div>/"; preg_match_all($pattern,$html,$matches); みたいな感じ?

don23_2009
質問者

お礼

ありがとうございます。 初心者のため知識不足でしたがclassでタグの特定はできないのですか? 参考になりました。

関連するQ&A

  • 正規表現

    分かりづらい質問で申し訳ありませんが、PHPの正規表現で教えて下さい。 現在下記のような文字列があります。 見やすく改行しましたが、本来は改行はなく、1行です。 最初にPタグがあり、次に複数のクラスが付いたdiv(これを①とします)、同じく複数のクラスが付いたdivタグ(これを②とします)があるような構造です。 このdivタグの中にはfigureタグ、その中にimg タグがあります。 ②番目のdivの中のimgのsrcには特定の文字列があります。 この特定の文字列を含む親のdivタグ全体を抜き出す正規表現を書きたいと思っています。 つまり、正規表現の結果下記部分が抽出できればと思います(これを「正解」とします)。 <div class="(省略)"> <figure> <img src="{特定の文字列}"> </figure> </div> 現在このように記述しましたが、①、②全てのdivが取得されてしまっている状態です。 「/<div class="se-component se-image-container __se__float-none" contenteditable="false">(?>).*<\/div>/i」 これを「正解」のように抽出するにはどのような正規表現になるのでししょうか? よろしく御願い致します。 <p>ghoge</p> <div class="se-component se-image-container __se__float-none" contenteditable="false"> <figure style="margin: 0px;"><img src="data:image/jpeg;base64,/9j/4AA" alt="" data-rotate=""> </figure> </div> <div class="se-component se-image-container __se__float-none" contenteditable="false"> <figure style="margin: 0px;"><img src="{特定の文字列}" alt="" data-rotate=""> </figure> </div>

    • ベストアンサー
    • 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
  • PHPでの正規表現

    PHPでの正規表現 下記のようなソースがあり、「備考情報・・・」の部分だけを抽出する正規表現がわからず困っております。 -------sample code------- <div class="product"> <strong>商品情報:</strong> </div> <div class="comment"> <strong>備考:</strong>&nbsp; 備考情報・・・・・ </div>   :   : -------sample code------- 以下のような正規表現を書いてみましたが、上手くいきませんでした。 「<strong>備考.* ([^\n]+)」 「<strong>備考:</strong>&nbsp;」の次の行の情報で、改行されるまでの情報を取得したいと考えております。 何度か試みても&nbsp;のコードや改行コードの取得、判定がうまくいかず、頭を抱えている次第でございます。 どなたかご教授いただけますと幸いです。 よろしくお願いいたします。

    • ベストアンサー
    • 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
  • 正規表現に困っています!!

    以下のような文字列にある「@1」・「@2」・「@3」・「@4」を抜き出したいのですが、 どんな正規表現を使用すれば良いか教えて頂けると非常に助かります。 <!-- #BeginLibraryItem "/Library/image01.lbi" -->\r\n <div class="@1"><img src="@2" alt="@3"></div>\r\n <p class="captionBlockA01 center">@4</p>\r\n <!-- #EndLibraryItem -->

  • PHP、正規表現の使い方

    PHPで特定の文字列から特定の文字までを削除したいのですが、 正規表現を使うということはわかりましたが、どのようにしていいかがいまいちわかりません。 http://www.sample.php?a=test&b=ex&c=sample という文字列があったとして、 &b=exを取り除きたい場合はどのようにしたらいいのでしょうか。 mb_ereg_matchを使用しようと思っていますが、 その他の方法があればそちらも教えてください。

    • ベストアンサー
    • PHP
  • 正規表現で抜き出した特定の文字列をDBに格納する

    外部Webページのソースから正規表現を用いて特定の文字列を抜き出したいと思っています。外部Webページのソースは以下の通りです。 <td>  <div class="s-box left">   <a href="URL"><img src="" alt="" width="" height="" border="" class="book" /></a>   <h3><a href="URL">書名</a></h3>   <h4>著者:文字列<br />定価(税込):500円</h4>  </div>  <div class="s-box center">   <a href="URL"><img src="" alt="" width="" height="" border="" class="book" /></a>   <h3><a href="URL">書名</a></h3>   <h4>著者:文字列<br />定価(税込):710円</h4>  </div>  <div class="s-box right">   <a href="URL"><img src="" alt="" width="" height="" border="" class="book" /></a>   <h3><a href="URL">書名</a></h3>   <h4>著者:文字列<br />定価(税込):730円</h4>  </div> </td> 上記のようなソースからdiv classごとに、 書名 著者:文字列 定価(税込):---円 という具合に抜き出したく思っていまが、正規表現がわからずプログラムが組めません。また、その抜き出した文字列をDB(MySQL)に自動的に格納するためにはどうしたらよいか。どなたかご教授頂けないでしょうか。宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 正規表現の文字列否定

    すいません、PHPをたまたま使用しているので、 PHPのカテゴリで質問させていただきますが、 正規表現で特定の文字列の集合を まとめて否定することはできないのでしょうか。 例えば、<p class="hoge"><a href="test.html">aaa</a></p> という部分があって、 hogeのクラスが付いている行のhrefのURIだけ取得したいのですが、 <p class="hoge"">という部分が取り除けません。 イメージ的には[^(<p class=\"hoge\">)]という感じで、 否定できるのかな~と思っていたんですが、 これはできないんですよね。 まとまった文字列を否定することはでいないのでしょうか。 ご教授お願いいたします。

    • ベストアンサー
    • PHP
  • 正規表現で詰まっています。

    こんにちは。 今、正規表現で困っています。 ファイルの中身 <meta name="description" content=""> <title> B'zのサイトへようこそ </title> 上記のようなhtmlのソースなのですが、以下のように変換できるように正規表現を考えましたが、できませんでした。 変換したい表現 <meta name="description" content="B'zのサイトへようこそ"> <title> B'zのサイトへようこそ </title> titleタグで囲まれた文字を、metaタグのcontentの中に入れたいのです。 とても困っています。どなたかご教授下さい。よろしくお願いいたします。

  • 正規表現

    次の文字列の<div>タグで囲まれた部分を取得したいです。 <div>タグは一番最初のもの ------------------------------------------------------------------ <div>ここは何文字かわからない</div> このうしろにも</div>が何回かきます。 ------------------------------------------------------------------ ですので、最初に一致した</div>で終わりにしたいです。 処理時間もその後のテキストを見なくてもよくなるでしょうし。 @"<div>{.}\A(</div>))" こうした所マッチしすぎてエラーになってしまいました。 よろしくお願いしまうs。

専門家に質問してみよう