Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno PHP regulární výraz

Ahoj, už se tu 2 dny morduju s jedním regulárním výrazem v PHP (PCRE), cílem je najít v řetězci toto, uvedu příklad:
<%%#Zájmy#zajmy$>Nějaký obsah</zajmy>
Známe jenom slovo zajmy, víc nic
Ale pozor, ty znaky %% a $ v prvním tagu můžou či nemusí být, takže o to je to složitější, zatím jsem se dostal k tomuto ($key je proměnná, kterou známe):

/<(.*)\#(.*)\#$key(\$|)>(.*)<\/$key>/

To ale někdy vyplivne toto:

<#Jídlo#jidlo$> <#Pití#piti$> <#Barva#barva$> <#Hudební styl#hudebnistyl$> <#Kapela#kapela$> <#Televize#televize

Díky za odpověď.

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Vyřešeno? Bylo by slušnost napsat jak?
host 06.06.2009 12:50
host
Já to ještě dolaďoval, aby to vypadalo nějak normálně ten výraz: /<(%*)\#([a-zA-Z0-9ěščřžýáíéťňůú\!…
marekdrtic 06.06.2009 12:59
marekdrtic
omg to preco tam vymenovavas tie znaky, nestaci ta negacia? :) Ale ok, ako chces. Ale sa mi zda ze t…
MM.. 06.06.2009 13:48
MM..
/<(%*)\#([^\<\>])\#$key(\$|)>([^<>]*)<\/$key>/ Toto mi tam jaksi nefunguje
marekdrtic 06.06.2009 13:51
marekdrtic
Nedal si tam hviezdicku (0 az nekonecno takych znakov) A <> myslim nepotrebuju \ nový
MM.. 06.06.2009 13:52
MM..
/<(%*)\#([^<>]*)\#$key(\$?)>([^<>]*)<\/$key>/ nový
MM.. 06.06.2009 13:54
MM..
Nefunguje a nechápu proč, ještě pro upřesnění, má to hledat třeba takovýto řetězec: <%%#Text plný h… nový
marekdrtic 06.06.2009 14:02
marekdrtic
Ale v tom tvojom co pises ze ti funguje na 100% mas predsa tiez uz ([^<>]*) Takze tato cast funguje… nový
MM.. 06.06.2009 14:27
MM..
Inac ten co akoze "funguje na 100%" je uplne zle, chyba tam jedno ], takze ten bude brat cokolvek ni… nový
MM.. 06.06.2009 14:31
MM..
Skus to co som pisal na nejaky link bez hackov a carkov. nový
MM.. 06.06.2009 14:33
MM..
Este nie som si isty ci tam nejak nepouzivas blbo tie zatvorky, skus /<%*\#[^<>]*\#$key\$?>[^<>]*<\… nový
MM.. 06.06.2009 14:38
MM..
ne, ty závorky tam musí být, jinak to nefunguje vůbec a hází chybu, že je špatný ten regex. nový
marekdrtic 06.06.2009 14:44
marekdrtic
Presne to si skopiroval co som tu vlozil a pise ti ze je spatny ragex? Kto kde ti to pise? Nechcelo… nový
MM.. 06.06.2009 14:47
MM..
Pouizvas funkciu ereg? Ak ano tak vyhod to / na zaciatku a na konci a aj to \ pred / nový
MM.. 06.06.2009 14:52
MM..
používám preg. nový
marekdrtic 06.06.2009 14:59
marekdrtic
A vyhod aj tie \ pred #. # neni specialny znak. nový
MM.. 06.06.2009 14:55
MM..
Toto urcite funguje mam to otestovane <?php $key = 'text'; $string = '<%%#Text plný háčků a čárek#t… nový
MM.. 06.06.2009 15:23
MM..
Díky moc za trpělivost, s tím ereg to funguje :beer::beer: nový
marekdrtic 06.06.2009 15:37
marekdrtic
Funguje to urcite aj s preg, ked sa to urobi poriadne ;-) Ok, neni zac. poslední
MM.. 06.06.2009 15:41
MM..
Ked nechces regex skladat, tak toto funguje urcite (mam otestovane): <?php $key = 'text'; $string =… nový
MM.. 06.06.2009 15:30
MM..
Inac nabuduce ked ti nieco nefunguje tak hladaj pricinu zjednodusovanim. T.j. mas nejaky program tes… nový
MM.. 06.06.2009 15:32
MM..

Toto urcite funguje mam to otestovane

<?php
$key = 'text';
$string = '<%%#Text plný háčků a čárek#text$>Text s háčky a čárkami</text>';
$regex = '<%*#[^<>]*#'.$key.'\$?>[^<>]*</'.$key.'>';

if( ereg($regex, $string, $regs) )
{
 $vypisat = htmlspecialchars($regs[0]);
 echo $vypisat;
}
else
{
 echo "Nepasuje";
}
?>

Schavlne ten regex skladam a pouzivam jednoduche uvodzovky, aby nevznikali problemy s tymznakom $, ten je tam najproblemovejsi.

Ziadne zatvorky netreba. Zatvorky sa u ereg v PHP pouzivaju tusim na to aby si rozdelil string do podpoli (podpolia by boli potom v $regs[1] , $regs[2], ... atd)

Ked nechces regex skladat, tak toto funguje urcite (mam otestovane):

<?php
$key = 'text';
$string = 'blablabla<%%#Text plný háčků a čárek#text$>Text s háčky a čárkami</text>blablabla';

if( ereg("<%*#[^<>]*#$key\\$?>[^<>]*</$key>", $string, $regs) )
{
 $vypisat = htmlspecialchars($regs[0]);
 echo $vypisat;
}
else
{
 echo "Nepasuje";
}
?>

Pred $ musia byt dve \, pretoze jedno odstrani PHP (kvoli "" stringu a druhe porebuje REGEX.

Inac nabuduce ked ti nieco nefunguje tak hladaj pricinu zjednodusovanim.
T.j. mas nejaky program testovaci a z niecoho co je moc zlozite (u nas ten regex) vyhadzujes postupne veci ktore sa ti mozu zdat nebezpecne (ja som zacal tym $ :-)) a samozrejme prislusne upravis aj vstup (aby bol jednoduchsi) a testujes az kym to zacne pracovat tak ako predpokladas. ;)

Zpět do poradny Odpovědět na původní otázku Nahoru