Autor | Zpráva | ||
---|---|---|---|
glararan Profil * |
#1 · Zasláno: 24. 5. 2012, 20:15:29
Zdravím.
Snažím se nakodovat parser, který bude hledat v body v příkladu <dl> <dt> Název příkladu </dt> <dd> Příklad </dd> ... ... </dl> Vůbec netuším jak napsat preg_match pro dt s názvem Název příkladu a aby mě vypsal obsah dd, ikdyž je tam více v dl dt a dd aby vypsal pouze to kde je v prech matchu název příkladu. Takže třeba <dl> <dt> Název příkladu1 </dt> <dd> Příklad1 </dd> <dt> Název příkladu2 </dt> <dd> Příklad2 </dd> </dl> A pak použiju preg_match(<dt>Název příkladu1</dt><dd>Teď něco nějaký ty znaky..</dd>, $curl, $matches) echo $matches[1]; // Vypíše pouze ten příklad1 a dál to nepokračuje Takhle nějak bych chtěl aby to fungovalo.. jenže já opravdu netuším jaký ty znaky do toho preg_matchu mám nacpat. A ještě by mě bodlo jestli by to umělo H1 a <p>. |
||
SeparateSK Profil |
použi preg_match_all:
<?php $text=file_get_contents("subor.html"); $regexp="<dt>(.*)<\/dt>.*<dd>(.*)<\/dd>"; if(preg_match_all("/$regexp/siU",$text,$vysledky,PREG_SET_ORDER)){ foreach($vysledky as $vysledok){ echo "To medzi DT: $vysledok[1]<br>"; echo "To medzi DD: $vysledok[2]<br>"; } } ?> $regexp="<dt>(.*)<\/dt>.*<dd>(.*)<\/dd>"; na $regexp="<h1>(.*)<\/h1>";
|
||
Joker Profil |
#3 · Zasláno: 24. 5. 2012, 20:29:42
glararan:
Na tohle by byl daleko lepší HTML parser místo regulárních výrazů. Ale jinak to co by mělo být místo „Teď něco nějaký ty znaky..“ je asi: .*?
Ovšem nebude to fungovat pro jakýkoliv kód tam může být, to ostatně zpracování HTML regulárními výrazy skoro nikdy. Proto jsem taky napsal tu první větu. |
||
glararan Profil * |
#4 · Zasláno: 24. 5. 2012, 20:36:12 · Upravil/a: glararan
SereparateSK
jde mi o to, že mezi DT dosadím já sám, aby to našlo ktomu DD a já potřebuju dostat jen výsledek z toho DD a další ostatní DT a DD zahodit. Joker: Dělám v parsingu poprvé takže netuším co myslíš. Omlouvám se za double, nemám učet ale vyřešil jsem to, díky SereparateSK za tvoje znaky doplnil jsem je tam a vypsalo to. Kod: if (preg_match('/<dt>ObsahDT<\/dt>.*<dd>(.*)<\/dd>/siU', $response, $matches)) echo $matches[1]; // obsah DD |
||
SeparateSK Profil |
#5 · Zasláno: 24. 5. 2012, 20:41:58
Takže chceš aby to zistilo, čo je medzi prvým <dd> a ďalšie <dd> nevypísalo?
<?php $text=file_get_contents("subor.html"); $regexp="<dd>(.*)<\/dd>"; preg_match("/$regexp/siU",$text,$vysledok); echo "$vysledok[1]<br>"; ?> |
||
Joker Profil |
#6 · Zasláno: 24. 5. 2012, 22:08:42
glararan:
„Joker: Dělám v parsingu poprvé takže netuším co myslíš.“ Povídání: Proč parsovat HTML regulárními výrazy a ne parserem? Asi hlavní faktor je, jak volně může být sestavený ten kontrolovaný kód. Jestli to generuje automat a je dané, že ten prvek třeba nikdy nebude mít atributy, nikdy v něm nebude nějaké složitější HTML a podobně, jsou regulární výrazy vcelku použitelné. Naopak třeba „Vyhledej všechny <P> jejichž nejbližší předchozí sourozenec je <H1>“ mi přijde jako úkol pro HTML parser. |
||
Časová prodleva: 12 let
|
0