Ups, napisalem [}] - oczywiscie dobrze zmieniles na []] :)
AklimX - nie dokladnie tak :P
Bledna interpertacja tych punktow:
( i ) - to jest iż to co w środku może się pojawić ile tam chce w szukanej części (po "[" i przed "]") - ok?
[^]] - uwzględnij wszystkie znaki prócz "]" jeśli to się pojawi zaniecha zamiany - ok?
-
- oznacza że to "]" nie może się pojawić się chociaż raz jak sie pojawi to nic nie zmienia i idze dalej - ok?
() to tak zwane backreference, to co zostanie dopasowane wewnatrz nawiasow bedzie mozna uzyc w czesci do zastapienia.
Przyklad (kropka to jeden dowolny znak)
mamy ciag: "12345" i RegExp: /.(.).(.)./
RegExp zostanie dopasowany do ciagu, bo ma on 5 znakow, natomiast do pierwszego backreference [czyli \1] leci "2" a do drugiego "4". Dzieki temu Jesli napiszemy:
preg_replace('/.(.).(.)./', '\1 - \2', '12345');
to otrzymamy ciag "2 - 4"
Chyba juz jasne :)
co do []] to nic sie nie zaniecha. Jesli mamy ciag "ab[cd]ef" to []] dopasuje sie do "a", bo "a" to nie "]". Jesli natomiast dodamy plusik za tym, czyli [^]]+ to RegExp bedzie szukal przynajmniej jednego znaku roznego od "]" ale bedzie sie staral znalezc jak najwiecej, czyli dopasuje ciag "ab[cd" i takie cos zwroci, gdyz nie ma dluzszego ciagu pasujacego, bo nastepny znak to "]".
Gdyby ciag byl "[a]" to dopasowany fragment bylby "[a" natomiast jesli ciag bylby "]" to RegExp nic by nie dopasowalo, bo + oznacza, ze musi byc conajmniej 1 pasujacy znak.
Polecam przeczytac artykul :) [oraz komentarze]