Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> 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
youngCoder
post
Post #2





Grupa: Zarejestrowani
Postów: 15
Pomógł: 2
Dołączył: 8.02.2009

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


gdzie tu masz preg_replace?

zapodaj funkcję youtube()

Ten post edytował youngCoder 8.02.2009, 20:51:55
Go to the top of the page
+Quote Post
Zyx
post
Post #3





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


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
Go to the top of the page
+Quote Post
1010
post
Post #4





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

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


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


--------------------
Go to the top of the page
+Quote Post
Zyx
post
Post #5





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

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


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ć.


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
Go to the top of the page
+Quote Post
1010
post
Post #6





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

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


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


--------------------
Go to the top of the page
+Quote Post
bartg
post
Post #7





Grupa: Zarejestrowani
Postów: 226
Pomógł: 25
Dołączył: 4.07.2007
Skąd: Berlin

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


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

Poczytaj o wyrażeniach regularnych smile.gif


--------------------
Go to the top of the page
+Quote Post
youngCoder
post
Post #8





Grupa: Zarejestrowani
Postów: 15
Pomógł: 2
Dołączył: 8.02.2009

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


'/\{YOUTUBE\}(.*?)\{\/YOUTUBE\}/i'

Ten post edytował youngCoder 9.02.2009, 20:26:38
Go to the top of the page
+Quote Post
1010
post
Post #9





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

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


Dzięki bardzo smile.gif Działa smile.gif

Musze przyznać że wyrażenia regularne nie są moja mocną stroną smile.gif


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 19.08.2025 - 13:12