Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Użycie funkcji na danych wynikowych preg_replace
Forum PHP.pl > Forum > PHP
DiH
Witam. Problem dla mnie dość nietypowy. Otóż staram się napisać funkcję która zamieni podany ciąg znaków na następujacy:

Ciąg: abc[link]abcdef[/link]def
Na: ab c[link]ab cd ef[/link]de f

Wymyśliłem jak to zrobić, choć pewnie istnieje jakaś prostsza metoda. Otóż, aby moje rozwiązanie w ogóle działało muszę zastosować funkcję w taki sposób:
  1. preg_replace('#(.*?)(\[[a-z]\])(.*?)(\[/[a-z]\])(.*?)#si',divstr('$1').'$2',$arg);

gdzie divstr to funkcja obcinająca tekst do ciągów 2-znakowych.

Moje pytanie: Czy umieszczanie funkcji w ten sposób jest w ogóle możliwe? Jeżeli nie, to prosiłbym o wskazówkę w jaki innych sposób rozwiązać ten problem. Czyli: nie ruszać samych znaczników phpBB, natomiast skracać tekst przed, pomiędzy i za nimi.

Z góry dziękuję.
Fifi209
Wyrażenie jest źle napisane, przykładowo podajesz zakres:
[a-z]

A ile razy może wystąpić znak z tego zakresu?
DiH
Dla testowanego przykładu wyrażenie jest dobre, sprawdzałem Mają to być np [ b ], [ i ] (bez spacji) etc. Jednak co do samego problemu: Można stosować w taki sposób funkcje, czy nie?

Na stronie http://xrg.es można sprawdzić mój przykład
Regular Expression: #(.*?)(\[[a-z]\])(.*?)(\[/[a-z]\])(.*?)#si
String: aaa[ b ]bbbb[/ b ]ccc[ i ]ddd[/ i ]eee

Wybrać preg_replace() i w polu Replacement wpisać $1$3 - te właśnie ciągi chcę objąć moją funkcją. Końcowy replacement, jaki ja chcę otrzymać to np.
  1. divstr('$1').'$2'.divstr('$3').'$4'.divstr('$5')
Problem w tym, że żaden z zapisów nie działa: ani divstr($1), ani divstr('$1')

Pozdrawiam
erix
masz dwie opcje:
DiH
Czytając w manualu o preg_replace_callback natknąłem się na linka zawierającego dokładnie to, co chcę zrobić, a nawet więcej: http://www.phpclasses.org/browse/package/4829.html
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.