Autor | Zpráva | ||
---|---|---|---|
kujeba Profil |
#1 · Zasláno: 10. 3. 2011, 13:27:03
Dobrý den,
mám řetězec (komplet html, získaný pomocí cUrl, ale to by nemělo mít vliv) ze kterého potřebuji získat všechny subřetězce, ohraničené určitými znaky. Konkrétně potřebuji získat z řetězce thread=nazev_firmy" nazev_firmy Používám metodu preg_match_all(), a to v tomto tvaru: preg_match_all('~thread\=(?[^\"]+)~i', $data, $vysledky); Hlásí mi to však následující chybu: Warning: preg_match_all() [function.preg-match-all]: Compilation failed: unrecognized character after (? or (?- at offset 10 in /home/vyvoj/test/searchstring.php on line 19 Můžete poradit kde dělám chybu? V regulárních výrazech se ztrácím a nikde nemůžu najít nějaký "manuál pro začátečníky". Díky za pomoc. |
||
Ricco Profil * |
#2 · Zasláno: 10. 3. 2011, 13:48:22
Pokial hladas nazov firmy z
thread="nazov_firmy" malo by stačiť toto preg_match_all('thread="(.*)"', $data, $vysledky); |
||
kujeba Profil |
#3 · Zasláno: 10. 3. 2011, 14:29:09
[#2] Ricco
Te reseni mi vypisuje chybu: Warning: preg_match_all() [function.preg-match-all]: Delimiter must not be alphanumeric or backslash |
||
Ricco Profil * |
#4 · Zasláno: 10. 3. 2011, 14:31:36
postni sem cely svoj kod, je možné že chyba je niekde inde.
|
||
Kcko Profil |
#5 · Zasláno: 10. 3. 2011, 14:33:06 · Upravil/a: Kcko
preg_match_all('~thread="(.*)"~', $data, $vysledky); |
||
kujeba Profil |
#6 · Zasláno: 10. 3. 2011, 14:40:48 · Upravil/a: kujeba
<a href="http://www.somedomain.com/dialogues?thread=SomeFirmName1">Some Firm Name 1</a> <a href="http://www.somedomain.com/dialogues?thread=SomeFirmName2">Some Firm Name 2</a> <a href="http://www.somedomain.com/dialogues?thread=SomeFirmName3">Some Firm Name 3</a> <?php for($i = 1; $i<4; $i++) { //testovaci cyklus $post = "city=268&p=".$i; $data = $html->getFirms($post); $vysledky = array(); //preg_match_all('thread="(.*)"', $data, $vysledky); nahrazeno jinym zapisem //preg_match_all('~thread="(.*)"~', $data, $vysledky); nahrazeno jinym zapisem preg_match_all('~thread=([^"]+)"~', $data, $vysledky); foreach($vysledky[1] as $firmname) { file_put_contents('test.csv', $firmname."\n", FILE_APPEND | LOCK_EX); } } ?> Funkcni. Dekuji moc. |
||
Kcko Profil |
#7 · Zasláno: 10. 3. 2011, 14:57:28
$data='<a href="http://www.somedomain.com/dialogues?thread=SomeFirmName1">Some Firm Name 1</a> <a href="http://www.somedomain.com/dialogues?thread=SomeFirmName2">Some Firm Name 2</a> <a href="http://www.somedomain.com/dialogues?thread=SomeFirmName3">Some Firm Name 3</a>'; preg_match_all('~thread=([^"]+)"~', $data, $vysledky); |
||
kujeba Profil |
#8 · Zasláno: 10. 3. 2011, 15:04:51
Vyřešeno, viz kód výše. Děkuji za pomoc.
|
||
kujeba Profil |
#9 · Zasláno: 10. 3. 2011, 16:47:58 · Upravil/a: kujeba
Kcko:
Mohl bych přeci jenom poprosit o vysvětlení, co a proč je v tom preg_match_all použito? Když už to tu řešíme, tak bych rád věděl, jak dostat třeba z <tr> <td>product_name1</td> <td>price1</td> </tr> <tr> <td>product_name2</td> <td>price2</td> </tr> hodnoty: product_name1,price1 product_name2,price2 |
||
Kcko Profil |
#10 · Zasláno: 10. 3. 2011, 17:08:43
Pouze základy. Konkrétně to, že chci všechny znaky za thread= krom " což je konec odkazu. Stačí trošku nastudovat :-)
|
||
Kcko Profil |
#11 · Zasláno: 10. 3. 2011, 17:11:24 · Upravil/a: Kcko
Bez regulárních výrazů bych to řešil. <td> bych nahradil za #, poté bych celý řetězec zbavil HTML tagů a následně rozložil dle #.
|
||
Časová prodleva: 13 let
|
0