Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Użycie funkcji na danych wynikowych preg_replace
DiH
post
Post #1





Grupa: Zarejestrowani
Postów: 251
Pomógł: 34
Dołączył: 7.01.2010

Ostrzeżenie: (0%)
-----


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ę.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
Fifi209
post
Post #2





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Wyrażenie jest źle napisane, przykładowo podajesz zakres:
[a-z]

A ile razy może wystąpić znak z tego zakresu?
Go to the top of the page
+Quote Post
DiH
post
Post #3





Grupa: Zarejestrowani
Postów: 251
Pomógł: 34
Dołączył: 7.01.2010

Ostrzeżenie: (0%)
-----


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

Ten post edytował DiH 18.02.2010, 15:22:58
Go to the top of the page
+Quote Post
erix
post
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




masz dwie opcje:
Go to the top of the page
+Quote Post
DiH
post
Post #5





Grupa: Zarejestrowani
Postów: 251
Pomógł: 34
Dołączył: 7.01.2010

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 22:23