Autor Zpráva
akaka
Profil *
Zdravím
snažím se předělat tento výraz:
/\(([^()]+|(?R))*\)/is


Momentálně funguje tak, že bere části textu v kulatých závorkách, například (sss(dd)ss) .. takže prostě cokoliv co je mezi ( a )
já bych ho ale chtěl předělat, aby místo ( a ) bral (citace) a (/citace), bohužel se mi vůbec nedaří.. zkoušel sem to například pomocí lookaround:
/\(([^()]+(?!\/?citace)|(?R))*\)/is

Ale to nefunguje. Nemám tušení co bych ještě mohl zkusit..

Kde mám tedy chybu? Díky

Moderátor Joker: Titulek „Pomoc s regulární výrazem“ byl moc obecný, změnil jsem ho.
Keeehi
Profil
Nic složitého na tom nehledej. Je to jako jakékoliv jiné hledání mezi stringy, možná tě matou ty závorky, ale ber je jako jakýkoliv jiný znak.
~\(citace\)(.*?)\(/citace\)~is
akaka
Profil *
No tento výraz funguje pouze na základní věci jako
(citace)něco(/citace)

Problém nastává když sou výrazy zahnízděné v sobě jako:

(citace)něco
 (citace)něco něco(/citace)
 (citace)něco něco
   (citace)něco něco(/citace)
 (/citace)
(/citace)


A na to se musí použít rekurze, pokud se nepletu
Keeehi
Profil
pak tedy asi
~\(citace\)(((?R)|.)*?)\(/citace\)~is
akaka
Profil *
Keeehi:
To funguje, díky, ale narazil sem na další problém.

Pokud použiju nějaký krátký text, třeba 50 znaků (citace) krátký text(/citace), tak to funguje tak jak má, ale pokud použiju nějaký text o délce třeba tisíc znaků a víc, (citace)dloooouhý text třeba 3000 znaků...(/citace), tak se mi v prohlížeči vrátí jen prázdná stránka a v apache logu je, že se restartoval

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:

0