Autor Zpráva
neonyy
Profil *
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
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 *
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 *
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 *
<?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 *
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> ";}
?>

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: