Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] wyrażenia regularne - zmiana tekstu na zmenne itp.
Forum PHP.pl > Forum > PHP
ITI
Hello smile.gif
Szukam wszedzie, ale znajduje tylko fragmenty informacji, z ktorych niestety nie udaje mi sie zlozyc calosci ;(

Potrzebuje zamienic tekst w formacie [obrazekX nazwa autor] na odpowiednia wartosc zmiennej $obrazekX gdzie X jest numerkiem od 1 do 9 (lub w ogole jakims numerem), a tym samym numerem obrazka, nastepnie jest nazwa, ktora jest nazwa obrazka, no i autor smile.gif

Znalazlem tutaj na forum fajny skrypt:

  1. <?php
  2. $text1 = 'text 1 replace';
  3. $text2 = 'text 2 replace';
  4. $s = '[text1] 
  5.  
  6. [text2] ';
  7.  
  8. echo preg_replace( '#[(textd+)]#sie', 'empty($1)?"":$1', $s );
  9. ?>

ale niestety nie rozwiazuje on moich problemow. W ogóle to nie bardzo radze sobie z tymi wyrazeniami ;(

Jeszcze raz dla wyjasnienia
mam w tekscie:
[obrazek1 nazwa autor]
a chce to miec:
obrazek1 - ma wyswietlac wartosc zmiennej $obrazek1, ktora wczesniej utworzylem
nazwa ma zawierac nazwe obrazka
a autor = autora

Potem to wszystko ma sie prezentowac np. w formie <img src="$obrazek1"> - 'nazwa'. Autorem obrazka jest: 'autor'.

Z gory dzieki za wszelkie propozycje i podpowiedzi biggrin.gif

Ps. czy ktos moze przy okazji wyjaznic co to sa te ?"": w tym kodzie, ktory wydnieje na gorze questionmark.gif
Jawor
Mozna to zrobic bez wyrazen regularnych uzywajac nastepujacych funkcji:

strlen() - sprawdzanie dlugosci danego ciagu
strpos() - sprawdzanie na ktorym miejscu znajduje sie pozadany znak
substr() - wycinanie z ciagu tekstu od miejsca n do m
be2k
mozna i bez regularnych ale ile byloby pieprzenia to ja dziekuje smile.gif

jesli dobrze zrozumialem to masz w tekscie takie ciagi znakow:
[obrazek1 Jezioro Janek]
i z tego masz uzyskac
<img src="$obrazek1"> - Jezioro. Autorem obrazka jest Janek
gdzie $obrazek1 to wartosc tej zmiennej, zgadza sie?

jesli tak to tu masz rozwiazanie:
  1. <?php
  2. $str = "[obrazek1 Domek_nad_jeziorem Janek]";
  3.  
  4. $pattern = array(
  5. '/[(obrazek[0-9]+) ([a-z0-9_-]+) ([a-z0-9_-]+)]/i',
  6. '/(obrazek[0-9]+)/ie'
  7. );
  8.  
  9. $replacement = array(
  10. '<img src="1"> - 2. Autorem obrazka jest: 3',
  11. 'empty($1)?"no_image.gif":$1'
  12. );
  13.  
  14. $str = preg_replace($pattern, $replacement, $str);
  15. ?>


tylko ze nazwa i autor musza byc jednym ciagiem znakow (zamiast spacji - lub _) co widac powyzej. nie wiem czy brales to pod uwage. mozna to ominac stosujac zapis:
$str = "[obrazek1 'Domek nad jeziorem' 'Janek']";
i wtedy trzeba nieznacznie zmodyfikowac wyrazenie regularne
ITI
Fajne, dziala biggrin.gif a mozna cos jeszcze napisac na temat tego 'Domek nad jeziorem' questionmark.gif smile.gif
be2k
teraz mozesz dawac opisy kilkuwyrazowe i autora kilkuwyrazowego:
  1. <?php
  2. $str = "[obrazek1 'Domek nad jeziorem' 'Jan Kowalski']";
  3. $obrazek1 = "domek.gif";
  4. $pattern = array(
  5. '/[(obrazek[0-9]+) ["']([a-z0-9 _-]+)["'] ["']([a-z0-9 _-]+)["']]/i',
  6. '/(obrazek[0-9]+)/ie');
  7. $replacement = array(
  8. '<img src="1"> - 2. Autorem obrazka jest: 3',
  9. 'empty($1)?"no_image.gif":$1');
  10. $str = preg_replace($pattern, $replacement, $str);
  11. ?>


jesli chodzi o ciag znakow, ktory masz podmieniac (czyli w przykladzie zmienna $str) to ciag ten moze byc zarowno objecty cudzyslowem (a w srodku apostrofy):
  1. <?php
  2. $str = "[obrazek1 'Domek nad jeziorem' 'Jan Kowalski']";
  3. ?>


jak i apostrofem a w srodku cudzyslow:
  1. <?php
  2. $str = '[obrazek1 "Domek nad jeziorem" "Jan Kowalski"]';
  3. ?>


jesli nie znajdzie zmiennej $obrazekX to wstawia obrazek o nazwie "no_image.gif"
ITI
Dzięki biggrin.gif Działa idealnie smile.gif chyba nigdy bym na to nie wpadł jak zrobić takie połączenie biggrin.gif No... moze by się udało za pare miesięcy biggrin.gif

Jeszcze raz dzięki.
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.