Autor | Zpráva | ||
---|---|---|---|
Mario92 Profil |
#1 · Zasláno: 14. 3. 2013, 22:34:50
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 |
#2 · Zasláno: 14. 3. 2013, 22:43:50
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 |
#3 · Zasláno: 14. 3. 2013, 22:51:17
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 |
#4 · Zasláno: 14. 3. 2013, 22:55:18
promiň, jo jasně, lze; ty kulaté závorky tam nejsou nutné:
'~<img[^>]*>~' '~<img.*?'.'>~' |
||
Jan Tvrdík Profil |
#5 · Zasláno: 14. 3. 2013, 23:02:17
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 |
#6 · Zasláno: 14. 3. 2013, 23:07:20
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 |
#7 · Zasláno: 14. 3. 2013, 23:11:26
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 |
#9 · Zasláno: 15. 3. 2013, 08:10:52
Cha to sem tomu dalm.Měl jsem namysli ,že to vrací pole o jednom prvku a ten prvek je prázdný.
|
||
Tori Profil |
#10 · Zasláno: 15. 3. 2013, 10:45:07
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 } |
||
Mario92 Profil |
#13 · Zasláno: 17. 3. 2013, 09:13:48
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 |
#14 · Zasláno: 17. 3. 2013, 09:24:04
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 |
#15 · Zasláno: 17. 3. 2013, 12:56:10
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 |
#16 · Zasláno: 18. 3. 2013, 02:27:05
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áč.
|
||
Časová prodleva: 13 let
|
0