

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ěď.
Aku funkciu pouzivas na analyzu tym regexom? Ptz moze byt fcia ktora vrati vsetky vyskyty toho co tam pasuje.
Ale najskor to bude tento problem:
<#Jídlo#jidlo$> a tu strasne vela vela vela kravin a na konci <#Jídlo#jidlo$></jidlo>
co sa moze stat ak sa nachadza ten link v stringu dvakrat. A to splna ten tvoj REGEX.
V tom pripade napr. ma napada ze si mozes obmedzit to
(.*)
cim testujes ten "Nejaky obsah" v linku tak, ze tam NESMIE byt < ani >
To sa v regexe da, ([^ neco]), vid napr. Regular_expression
T.j. ak sa nemylim tak namiesto toho (.*) daj ([^<>]*)
... alebo som nepochopil ze jaky presne mas problem.
P.S. podobne by som asi obmedzil aj tie prve dve vyskyty toho (.*), ono to moze byt dost nebezpecne (ptz do toho pasuje cokolvek a teda vezme prve <, potom miliardu blbosti, a potom tvoj link). Chapes? Musis to obmedzit (idealne na %*, ked tam moze byt (0 az nekoneco) znakov %, ale nic ine). A to druhe (.*) zmenit tiez na [^<>]*
Inac toto
(\$|)
ma aky vyznam? $ alebo nic ci jak? :) Ked chces $ alebo nic, tak by som radsej pouzil ?
(\$?)
ale REGEXy fakt nemusim takze mozno je dobre aj to (\$|), len ja by som to takto nepouzil.
Vyřešeno? Bylo by slušnost napsat jak?
Já to ještě dolaďoval, aby to vypadalo nějak normálně ten výraz:
Takhle mi to alespoň funguje na 100%
omg to preco tam vymenovavas tie znaky, nestaci ta negacia? :) Ale ok, ako chces. Ale sa mi zda ze ti tam chyba jedno ]
Toto mi tam jaksi nefunguje
Nedal si tam hviezdicku (0 az nekonecno takych znakov)
A <> myslim nepotrebuju \
Nefunguje a nechápu proč, ještě pro upřesnění, má to hledat třeba takovýto řetězec:
Ale v tom tvojom co pises ze ti funguje na 100% mas predsa tiez uz
([^<>]*)
Takze tato cast funguje urcite (ale over to este na hacky a carky v tej casti).
Nieco tam asi robis blbo, nevidim ti na to ze co.
Skusal si copy-paste toho co som tu vlozil?
Inac ten co akoze "funguje na 100%" je uplne zle, chyba tam jedno ], takze ten bude brat cokolvek nielen $key.
Skus to co som pisal na nejaky link bez hackov a carkov.
Este nie som si isty ci tam nejak nepouzivas blbo tie zatvorky, skus
Tie znaky / na zaciatku a na konci je predpokladam PHP zalezitost. K vyrazu to nepatri.
ne, ty závorky tam musí být, jinak to nefunguje vůbec a hází chybu, že je špatný ten regex.
Presne to si skopiroval co som tu vlozil a pise ti ze je spatny ragex? Kto kde ti to pise? Nechcelo sa mi to testovat ale vidim ze budem musiet :)
Pouizvas funkciu ereg? Ak ano tak vyhod to / na zaciatku a na konci a aj to \ pred /
používám preg.
A vyhod aj tie \ pred #. # neni specialny znak.
Toto urcite funguje mam to otestovane
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)
Díky moc za trpělivost, s tím ereg to funguje
Funguje to urcite aj s preg, ked sa to urobi poriadne
Ok, neni zac.
Ked nechces regex skladat, tak toto funguje urcite (mam otestovane):
Pred $ musia byt dve \, pretoze jedno odstrani PHP (kvoli "" stringu a druhe porebuje REGEX.
Inac nabuduce ked ti nieco nefunguje tak hladaj pricinu zjednodusovanim.
) a samozrejme prislusne upravis aj vstup (aby bol jednoduchsi) a testujes az kym to zacne pracovat tak ako predpokladas. ;)
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 $