Autor Zpráva
kujeba
Profil
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"
řetězec
nazev_firmy
.

Používám metodu preg_match_all(), a to v tomto tvaru:
preg_match_all('~thread\=(?[^\"]+)~i', $data, $vysledky);
, kde $data = kompletní řetězec, $vysledky = pole s nalezenými řetězci.
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 *
Pokial hladas nazov firmy z
thread="nazov_firmy"

malo by stačiť toto

preg_match_all('thread="(.*)"', $data, $vysledky);
kujeba
Profil
[#2] Ricco
Te reseni mi vypisuje chybu: Warning: preg_match_all() [function.preg-match-all]: Delimiter must not be alphanumeric or backslash
Ricco
Profil *
postni sem cely svoj kod, je možné že chyba je niekde inde.
Kcko
Profil
preg_match_all('~thread="(.*)"~', $data, $vysledky);
// regurál jsem netestoval, stejně si myslím že bude greedy a nebude to fungovat představ.
kujeba
Profil
<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
$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
Vyřešeno, viz kód výše. Děkuji za pomoc.
kujeba
Profil
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
Pouze základy. Konkrétně to, že chci všechny znaky za thread= krom " což je konec odkazu. Stačí trošku nastudovat :-)
Kcko
Profil
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 #.

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: