ugrás a tartalomhoz

Keresés stringben, bizonyos stringek között, hogy lehet?

forumferenc · 2012. Feb. 14. (K), 13.26
Sziasztok!
file_get_contents-el felolvasok egy weboldalt, és abban vannak h1-es tagek és az összes h1 tag közötti szöveget ki szeretném gyűjteni egy tömbe.
Melyik a legalkalmasabb függvény(ek)?
Köszi.
 
1

Tök elemi és ellenvallt

kuka · 2012. Feb. 14. (K), 13.55
Tök elemi és ellenvallt módszer: reguláris kifejezés.

php > $szoveg = file_get_contents('http://weblabor.hu/forumok/temak/111318');

php > echo preg_match_all('!<h1.+?>([\w\W]+?)</h1\s*>!i', $szoveg, $talalat);
1

php > print_r($talalat);
Array
(
    [0] => Array
        (
            [0] => <h1 id="site-name">
        <a href="/" title="Címlap" rel="home"><span>Weblabor</span></a>
      </h1>
        )

    [1] => Array
        (
            [0] => 
        <a href="/" title="Címlap" rel="home"><span>Weblabor</span></a>
      
        )

)
Bonyolultabb és ajánlott módszer: HTML parser.
(Lásd a Google keresés „php html dom parser” kifejezésre találatait.)
2

<h1.+?>Ehelyett nem inkabb

Ajnasz · 2012. Feb. 14. (K), 14.39
<h1.+?>
Ehelyett nem inkabb
<h1.*>
vagy meginkabb
<h1[^>]*>
?

Hasonloan fura a groupban is a "+?", plusz ott meg a [\w\W] is lehetne akar egy "." is.

Es ahogy irtad is, html/xml-t-t nem parseolunk regexppel.
3

Ehelyett nem inkabb<h1.*>De

kuka · 2012. Feb. 14. (K), 14.53
Ehelyett nem inkabb
<h1.*>
De igen, ezt elkapkodtam. Köszönöm.
vagy meginkabb
<h1[^>]*>
Lehet. Én jobban szeretem a non-greedy kifejezéseket.
Hasonloan fura a groupban is a "+?", plusz ott meg a [\w\W] is lehetne akar egy "." is.
Lehet, de csak ha s flaget is adsz a reguláris kifejezésnek. (JavaScript beidegződés, ott nincs s flag.)
4

Nem vagyok regexp guru, de a

MadBence · 2012. Feb. 14. (K), 17.17
Nem vagyok regexp guru, de a <h1.*> nem lesz mohó? Vagyis a .*? lenne a kevésbé mohó.
Nem próbáltam ki, de a .* szerintem a lehető leghosszabb karakterláncra illeszkedne. (ha nem így van, akkor a fenti kérdőjeles (.*?) változatot magyarázza meg valaki)
5

Nem vagyok regexp guru, de a

kuka · 2012. Feb. 14. (K), 17.40
Nem vagyok regexp guru, de a <h1.*> nem lesz mohó?
Valóban. A válaszkor sajnos csak a * vs. + részre figyeltem és a lemaradt ? ügyét elfelejtettem szóvá tenni.

Szerkesztés: Upsz, most meg arra nem figyeltem, hogy ezt nem nekem válaszoltad.
6

Dom

pp · 2012. Feb. 15. (Sze), 07.36
http://hu.php.net/manual/en/book.dom.php

kb:
<?php
  $doc = new DOMDocument();
  $doc->loadXML($html);
  $headers_text = array();
  foreach ($xml->getElementsByTagName('h1') as $header) {
    $headers_text[] = $header->textContent;
  }
?>
7

Ez szép, csak

Pepita · 2012. Feb. 15. (Sze), 13.33
Az első sorba én ->loadHTML($html) -t írnék, és nagyobb oldal esetében érdemes inkább a ->loadHTMLFile($url) használata, hogy ne legyen egyszerre két helyre betöltve az adat. (Persze ehhez kell az allow_url_fopen is.)