Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: preg replace i zamiana na funkcje
Forum PHP.pl > Forum > PHP
1010
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?
youngCoder
gdzie tu masz preg_replace?

zapodaj funkcję youtube()
Zyx
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
1010
potrzebuje żeby działało to tak:

znajduje w tekście wszystkie elementy typu

{YOUTUBE}http://www.youtube.com/watch?v=Jkm86AfI48I&feature=rec-HM-r2{/YOUTUBE}

i przekazywał do funkcji youtube($parametr): http://www.youtube.com/watch?v=Jkm86AfI48I...ature=rec-HM-r2

Potem w tekście zamiast {YOUTUBE}http://www.youtube.com/watch?v=Jkm86AfI48I&feature=rec-HM-r2{/YOUTUBE} w tekście żeby w te miejsca wstawiał wynik działania tej funkcji.

Po prostu ta funkcja ma w miejsce {YOUTUBE}http://www.youtube.com/watch?v=Jkm86AfI48I&feature=rec-HM-r2{/YOUTUBE} wstawiać kod html filmiku (moja funkcja youtube generuje takowy z url).

Jak takie coś zrobić?

Próbowałem z tą funkcją preg_replace_callback, męczę się od wczoraj i nie działa mi to
Zyx
preg_replace_callback przekaże Ci do youtube() tablicę z tym, co znalazł; musisz z niej sobie dopiero powybierać dane. Zadaj sobie pytanie: czy używasz youtube() jeszcze w jakimś innym miejscu? Jeśli nie, możesz spokojnie ją przerobić, by wybierała dane ze zwróconej tablicy, a jeśli tak, to napisz dodatkową nakładkę, która by to przepakowała. Przy Twoim zapytaniu URL powinien znajdować się pod indeksem 1, ale zawsze możesz sobie wyświetlić całość przy pomocy var_dump() i sprawdzić.
1010
niestety taka linia:

  1. <? $newtext = preg_replace_callback("{YOUTUBE}(.*){/YOUTUBE}", "youtube", $newtext); ?>


zwraca mi taki błąd:
Kod
Warning: preg_replace_callback() [function.preg-replace-callback]: Delimiter must not be alphanumeric or backslash in C:\Documents and Settings\Administrator\Desktop\www\flyweb\butelka\funkcje\bbcode.php on line 68
bartg
  1. <?
  2. $newtext = preg_replace_callback("#{YOUTUBE}(.*){/YOUTUBE}#", "youtube", $newtext); ?>

Poczytaj o wyrażeniach regularnych smile.gif
youngCoder
'/\{YOUTUBE\}(.*?)\{\/YOUTUBE\}/i'
1010
Dzięki bardzo smile.gif Działa smile.gif

Musze przyznać że wyrażenia regularne nie są moja mocną stroną smile.gif
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.