

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ěď.
Proč regulární výraz? Nestačí na to řetězcové funkce, např. strpos? Nebo asi nechápu podstatu problému.
Já bych to raději řešil tím regulárním výrazem, protože se to tím zjednoduší, to strpos bych nechal až jako krajní možnost
V čem spočívá to zjedodnušení?
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 $