Autor | Zpráva | ||
---|---|---|---|
neonyy Profil * |
#1 · Zasláno: 17. 2. 2008, 03:44:27
Hrozně moc by mi pomohlo kdyby mi někdo mohl říct jakým způsobem lze nastavit regularni vyrazy v php tak, abych mohl z textu (HTML) dostat v tomto případě právě ten 'Hledaný text'
soubor.html ---------------- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> ... <li> Hledaný text </li> ... </body> <html> V proměnné mám text a potřeboval bych z něj vyfiltrovat konkrétní 'Hledaný text' A potřeboval bych, aby to fungovalo asi takto : - před hledaným výrazem může být jakýkoliv text o jakkekoliv délce - a hledej do té doby dokud nenarazíš na <li> které bude 5. v pořadí. - a jakmile najdeš tento tag, tak ulož do proměnné to co je mezi ním a tagem </li> předem mockrát děkuju za každou radu |
||
Akacko Profil |
#2 · Zasláno: 17. 2. 2008, 09:17:21 · Upravil/a: Akacko
V popisu funkce preg_match_all() jsou na to příklady. Jen dodám, že regulární výraz bude vypadat nějak takto:
$reg = '/<li>(.*)<\/li>/i'; takže všechno to bude vypadat asi nějak takhle $html = '...'; //nactes html kod $reg = '/<li>(.*)<\/li>/i'; // reknes co chces hledat preg_match_all($html, $reg, $vysledky); //ulozis vsechny udaje mezi <li> a </li> do promenne typu pole $vysledky /*obsah pateho <li> v poradi si vypises takhle */ echo $vysledky[4]; |
||
neonyy Profil * |
#3 · Zasláno: 17. 2. 2008, 17:41:25
Jestli jsem to dobře pochopil tak by to mělo vypsat 'eee'
<?php $html = '<li >aaa</li><li >bbb</li><li >ccc</li><li >ddd</li><li >eee</li>'; //nactes html kod $reg = '/<li>(.*)<\/li>/i'; // reknes co chces hledat preg_match_all($html, $reg, $vysledky); //ulozis vsechny udaje mezi <li> a </li> do promenne typu pole $vysledky /*obsah pateho <li> v poradi si vypises takhle */ echo $vysledky[4]; ?> Jenže na místo toho to vypíše chybovou hlášku : Warning: preg_match_all() [function.preg-match-all.html]: Unknown modifier 'a' in C:\ComplexWebServer\http_docs\zkouska\index-3.php on line 5 Notice: Undefined offset: 4 in C:\ComplexWebServer\http_docs\zkouska\index-3.php on line 7 |
||
Nosko Profil * |
#4 · Zasláno: 17. 2. 2008, 18:01:40
Podľa dokumentácie
int preg_match_all ( string $pattern , string $subject , array &$matches [, int $flags [, int $offset ]] ) zameň prvé dva parametre a malo by byť ok ;) |
||
neonyy Profil * |
#5 · Zasláno: 17. 2. 2008, 18:52:00
<?php $html = '<li >aaa</li><li >bbb</li><li >ccc</li><li >ddd</li><li >eee</li>'; //nactes html kod $reg = '/<li>(.*)<\/li>/i'; // reknes co chces hledat preg_match_all($reg, $html, $vysledky); //ulozis vsechny udaje mezi <li> a </li> do promenne typu pole $vysledky /*obsah pateho <li> v poradi si vypises takhle */ echo $vysledky[4]; ?> to mi pro změnu vypíše : Notice: Undefined offset: 4 in C:\ComplexWebServer\http_docs\zkouska\index-3.php on line 6 |
||
neonyy Profil * |
#6 · Zasláno: 17. 2. 2008, 19:48:03
Už jsem na to přišel...jinak mockrát děkuju za rady
Funkční příklad pro všechny co by v budoucnu řešili něco podobného : <?php $text = '<li>aaa</li><li>bbb</li><li >ccc</li><li>ddd</li><li>eee</li>'; //nactes html kod $reg = '/<li>(.*)<\/li>/'; // reknes co chces hledat preg_match_all($reg, $text, $chars); for($i=0;$i<count($chars[0]);$i++) {echo $chars[0][$i]."<br> ";} ?> |
||
Časová prodleva: 16 let
|
0