Autor Zpráva
Mario92
Profil
Zdravím.
Už asi 2h bojuji s regulárními výrazy a bez úspěchu.Po tom co stáhnu zdrojový kód bych v něm potřeboval najít všechny tagy obrázků tedy z textu:
<a href="index.php?site=user_registrace"><img src="img/tl_sip.png"><span>Biskupové se spletli a oslavovali jako papeže italského kardinála<img src="img/kostka.jpg">
chci abych dostal
<img src="img/tl_sip.png">
<img src="img/kostka.jpg">

našel jsem ,že bych na to měl použít funkce preg_match ale se zápisem regulárních výrazů nemůžu hnout.
Předem děkuju.
juriad
Profil
nejjednodušeji takto:
preg_match_all('~<img.*?>~', $text, $nalezene)

význam:
~ - oddělovač označující začátek výrazu
<img - kus textu, který hledáš
.*? - cokoli (ale snaž se co nejméně)
> - kus textu
~ - oddělovač označující konec výrazu

výsledkem tedy bude, že najde vše co začíná <img a končí >, přičemž uvnitř neobsahuje znak >
Mario92
Profil
Bohužel to nemůžu ani vyzkoušet protože to ?> bere jako konec php skriptu neslo by to zapsat '~<img([^>]*)>~'
([^>]*) jakýkoliv znak kromě > kolikrát chceš?
juriad
Profil
promiň, jo jasně, lze; ty kulaté závorky tam nejsou nutné:
'~<img[^>]*>~'
nebo šalamounsky:
'~<img.*?'.'>~'
Jan Tvrdík
Profil
Mario92:
našel jsem ,že bych na to měl použít funkce preg_match
Lepší je použít funkce pro práci s DOM.

$doc = new DOMDocument();
$doc->loadHTML('<html>...</html>');
$images = $doc->getElementsByTagName('img');
Mario92
Profil
Nějak to nemůžu rozchodit.Mám někde chybu?
vrací to jen prazne pole o jednom prvku

$retezec=file_get_contents("http://seznam.cz/");
preg_match_all('~<img[^>]*>~', $retezec, $images);

na DOM jsem taky narazil ,asi je to i lepší ,ale já bych to zde přece jenom udělal přes regulární výrazy.
Jan Tvrdík
Profil
Mario92:
vrací to jen prazne pole o jednom prvku
Jak může být prázdné a o jednom prvku zároveň? :) Kód funguje.

já bych to zde přece jenom udělal přes regulární výrazy
Máš k tomu nějaký speciální důvod?
juriad
Profil
Ano, to je správně:
Array
(
    [0] => Array
        (
            [0] => <img src="/st/img/2011//logo.png?3.32.10" width="250" height="75" alt="Seznam" title="Seznam" />
            [1] => <img src="/st/img/weather/w17.png" width="32" height="32" alt="Oblačno sníh" title="Oblačno sníh" />
            [2] => <img src="/st/img/weather/w17.png" width="32" height="32" alt="Oblačno sníh" title="Oblačno sníh" />
            [3] => <img src="/st/img/weather/w2.png" width="32" height="32" alt="Polojasno" title="Polojasno" />
            [4] => <img src="/favicons/002/26-nAcEdb.png" width="16" height="16" alt="Novinky - přehled" />
            [5] => <img class="top-foto" src="/favicons/26/cdfbf8f9d5192cbc8cb357a461e64ba4.jpg" width="161" height="91" alt="" />
            [6] => <img src="/favicons/105/1051-HdtbaH.png" width="16" height="16" alt="Super.cz" />
            [7] => <img class="top-foto" src="/favicons/1051/8b1c600368c6b33cfd14c661a829ea56.jpg" width="100" height="55" alt="" />
            [8] => <img src="/favicons/018/181-DkKGMv.png" width="16" height="16" alt="Sport - přehled" />
            [9] => <img class="top-foto" src="/favicons/181/36a5968518035827b7c1f93eaf39edd0.jpg" width="71" height="40 " alt="" />
            [10] => <img src="/favicons/019/194-DBrJCJ.png" width="16" height="16" alt="Stream.cz - zábavná videa" />
            [11] => <img class="top-foto" src="/favicons/194/5cede7a2a26afd9849357afcb4b0209a.jpg?r=Bulv%C3%A1rn%C3%AD%20legenda%20Ornella%20%C5%A0tikov%C3%A1%20za%C4%8Dala%20rodit%20p%C5%99ed" width="137" height="76" alt="" />
            [12] => <img class="top-foto" src="/favicons/194/bf470e39edbd665804f209441a10eaab.jpg?r=Kam%20na%20ty%20n%C3%A1pady%20chod%C3%AD%3F%20Ru%C5%A1t%C3%AD%20voj%C3%A1ci%20se%20bav%C3%AD%20vynal" width="137" height="76" alt="" />
            [13] => <img class="top-foto" src="/favicons/194/d7da7e03802854fec66d68396e2ba6de.jpg?r=Tak%20tohle%20feministky%20nerozd%C3%BDchaj%C3%AD..." width="137" height="76" alt="" />
            [14] => <img src="/favicons/151/71510-qdjavj.png" width="16" height="16" alt="Proženy" />
            [15] => <img class="top-foto" src="/favicons/71510/465125d46e0ad686b1cfb9f1c52bf0ac.jpg" width="60" height="40" alt="" />
            [16] => <img src="/favicons/115941/ab297acf993f0c6f270e29e13c1fea7a.png" width="100" height="60" alt="" />
            [17] => <img src="/favicons/130541/eac6cc817b9537f16cda6a228255ea5c.jpg" title="Example zítra rozdovádí ČR" alt="Example zítra rozdovádí ČR" width="41" height="41" />
            [18] => <img src="/st/img/2011/horoskopy/9.png" width="65" height="60" alt="Střelec" />
        )

)

pokud chceš mít pole $images jinak strukturované, tak si přečti o čtvrtém parametru funkce preg_match_all (flags).
Mario92
Profil
Cha to sem tomu dalm.Měl jsem namysli ,že to vrací pole o jednom prvku a ten prvek je prázdný.
Tori
Profil
Mario92:
Jinou stránku pomocí file_get_contents načtete? (pokud ne, tak máte vypnutou volbu allow_url_fopen).
Mario92
Profil
Už jsem to rozchodil.. díky moc!
Ještě bych se zeptal do file_get_contents bude samozřejmě URL dodáváno dynamicky.Jak se té funkce máma zeptat jestli je vše ok.
Použil jsem
if(file_get_contents($URL))==true)....
else echo "Špatne url";
ale tohle mu není po chuti hází chybu: php_network_getaddresses: getaddrinfo failed:
Virtus
Profil
$result=file_get_contents("http://www.example.com");
if ($result === false)
{
    // treat error
} else {
    // handle good case
} 
okopírováno z php.net - tam nejdeš kompletní manuál k této konkrétní funkci. (netestoval jsem to)
Mario92
Profil
Takhle jsem na to šel a vícemeně to fungovalo stím ,že do $result to vrátilo false při neexistující stráce, ale hodilo to tu chybovou hlášku.
Do manuálu jsem se samozřejme díval ,ale bohužel jsem nic nevymyslel.Nevěděl bys jak na to?
juriad
Profil
Přidej před volání file_get_contents zavináč, viz http://www.php.net/manual/en/language.operators.errorcontrol.php . To potlačí výpis chyb pro tento jeden příkaz.
Virtus
Profil
Zavináč je sice pěkná věc, ale nedoporučoval bych jej, lepší je najít jiný způsob.
php_network_getaddresses: getaddrinfo failed: Tohle obvykle znamená, že se snažíte spustit něco za proxy serverem, vůči kterýmu nemá PHP ověření, což je logické vzhledem k tomu, že stránka neexistuje, nemůže PHP dostat ověření.
V takovém případě, je lepší použít cURL. cURL vám umožný udělat tunel ven přes proxy server.
Jan Tvrdík
Profil
Virtus:
ale nedoporučoval bych jej, lepší je najít jiný způsob
Pro IO operace (jako třeba file_get_contents) často není lepší způsob než zavináč.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: