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 |
#2 · Zasláno: 3. 12. 2010, 20:39:35 · Upravil/a: Keeehi
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 * |
#3 · Zasláno: 4. 12. 2010, 00:13:20
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 |
#4 · Zasláno: 4. 12. 2010, 00:38:09
pak tedy asi
~\(citace\)(((?R)|.)*?)\(/citace\)~is |
||
akaka Profil * |
#5 · Zasláno: 5. 12. 2010, 17:24:15
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 |
||
Časová prodleva: 13 let
|
0