Autor Zpráva
deader
Profil
Zdravím, nevím, jak mám vytvořit regulární výraz, který by aktualizoval v dlouhém řetězci tenhle zápis:
_**_left;54;nadpis;3;;;;;_**_
na toto:
_**_left;54;nováHodnota;nováHodnota;;;;;_**_
Přičemž 54 je id a to je jediný parametr, který z původních hodnot znám. Tedy jsem vytvořil něco takového:
$obsah=preg_replace("/_\*\*_left;".$id."(;[^;]*){1,5}_\*\*_/", "_**_left;".$id.";".$nadpis.";".substr($uroven[$i],-1).";".$sirka[$i].";".$komentar[$i].";".$typ[$i].";".$inner.";".$vlastnosti[$i]."_**_",$obsah);
To mi však zápis nenajde. Jsem na regulární výrazy úplný amatér. Můžete mi prosím pomoci?
deader
Profil
To opravdu nikdo neví, jak vytvořit takový jednoduchý výraz?
AM_
Profil
deader:
To opravdu nikdo neví, jak vytvořit takový jednoduchý výraz?
i na mém 1920px širokém monitoru se mi u toho výrazu objevil vertikální scroll. Tak jakýpak jednoduchý :) mě a asi ani nikomu jinému se nechce ten výraz luštit a ladit. Zkus si ho odladit sám, já vím, že je to otrava, ale není důvod, proč by to měl někdo dělat za tebe, ono ne že jsi amatér na reguláry, jen jsi líný si to sám odladit. Prostě si hledaný výraz zjednoduš (pro začátek začni třeba jen na _**_), napiš si regulár, který najde to, pak si postupně začni přidávat ty středníky atd... časem na to buď přijdeš sám nebo alespoň odhalíš, v čem přesně nastává problém, a budeš umět položit jednodušší otázku, na kterou bude někdo ochoten odpovědět.
deader
Profil
Regulární výraz jej jen "/_\*\*_left;".$id."(;[^;]*){1,5}_\*\*_/" , to dál je jen to, čím se to má ta část řetězce. Ale to je jedno.
Již jsem to po 2 hodinách vyřešil. Problém byl v tom, že do (;[^;]*) spadal i konec úseku(_**_) a jako konec se bral konec jiného úseku. Tak jsem to napsal takhle:
"/_\*\*_left;".$i."(;[^;(_\*\*_)]*){1,7}_\*\*_/"
Akorát nevím, proč na zažátku a konci regulárního výrazu musí být lomítka. Když je tam nedám, tak to vypíše warning:
Warning: preg_replace() [function.preg-replace]: Unknown modifier 'l' in ..
Majkl578
Profil
deader:
Akorát nevím, proč na zažátku a konci regulárního výrazu musí být lomítka.
Protože je to pravidlo. Nemusí to být lomítka, já třeba používám vlnku (~).
deader
Profil
Dík za informaci.

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