Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> preg replace i zamiana na funkcje
1010
post
Post #1





Grupa: Zarejestrowani
Postów: 749
Pomógł: 37
Dołączył: 3.10.2006

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


Witam,
mam taki kod:
  1. <?
  2. $newtext = eregi_replace("{YOUTUBE}(.*){/YOUTUBE}", "1", $newtext);
  3. ?>

zamienia ona coś takiego
Kod
hfud ishu ihfds hfuis huif {YOUTUBE}tutaj link{/YOUTUBE} fhus hfui h

na
Kod
hfud ishu ihfds hfuis huif tutaj link fhus hfui h



Natomiast gdy chcę zrobić takie cos:
  1. <?
  2. $newtext = eregi_replace("{YOUTUBE}(.*){/YOUTUBE}", youtube("1"), $newtext);
  3. ?>

moim celem jest aby w miejsce {YOUTUBE}tutaj link{/YOUTUBE} funkcja zrobiła z linku object. Jednak gdy w funkcji wyświetle parametr który przekazuje to wyświetla \1. Dlaczego nie przekazuje linku?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Zyx
post
Post #2





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


Domyślam się, że chcesz, aby dane, które znalazło wyrażenie regularne, przeszły przez tajemniczą, niezdradzoną nam funkcję youtube(). Taki kod, jak podajesz, na pewno wtedy nie zadziała. Co oznacza zapis funkcja('foo')? Jest to ZAWSZE wywołanie funkcji funkcja w tym konkretnym miejscu dla tej konkretnej wartości. Ty zaś próbujesz użyć tego do przekazania informacji, że inna funkcja ma wywoływać Twoje youtube(), gdy coś tam się wydarzy - to nie ma prawa działać w tej postaci.

Masz dwie możliwości:
1. Użyć w wyrażeniu modyfikatora e i zapisać informację o funkcji, ale jako ciąg tekstowy.
2. Użyć funkcji preg_replace_callback, która jest właśnie stworzona do takich zabiegów. Przykłady i zasady jej użycia znajdziesz w dokumentacji: http://docs.php.net/manual/en/function.pre...ce-callback.php
Go to the top of the page
+Quote Post

Posty w temacie


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: 3.10.2025 - 14:08