Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Wyrażenie regularne
Forum PHP.pl > Forum > Przedszkole
-mASTEr-
Witam, chciałbym zrobić następującą rzecz.
Odnaleźć określony ciąg i go zastąpić innym. Nie chce str_replace, bo określony ciąg nie jest znany. Trzeba użyć wyrażeń regularnych, ktorych niestety nie znam. Konkretnie chodzi o to, aby w zmiennej, która przechowuje zawartość pliku odnaleźć nazwę uzytkownika i date, nazwa uzytkownika brana jest z SESJI.

Wyglada to mniej więcej tak:

  1. <?php
  2. $d=date(d);
  3. $m=date(n);
  4. switch ($m) {
  5. case '1': $m='Styczeń'; break;
  6. case '2': $m='Luty'; break;
  7. case '3': $m='Marzec'; break;
  8. case '4': $m='Kwiecień'; break;
  9. case '5': $m='Maj'; break;
  10. case '6': $m='Czerwiec'; break;
  11. case '7': $m='Lipiec'; break;
  12. case '8': $m='Sierpień'; break;
  13. case '9': $m='Wrzesień'; break;
  14. case '10': $m='Październik'; break;
  15. case '11': $m='Listopad'; break;
  16. case '12': $m='Grudzień'; break;}
  17. $godz=date("Y, H:i");
  18.  
  19. $l=$_SESSION['zalogowany'].'|'.$d.' '.$m.' '.$godz;
  20.  
  21. $logowania=preg_replace('/^'.$_SESSION['zalogowany'].'|.*}}!{{$/', '$l', $logowanie);
  22. ?>


W pliku są zapisane informacje w taki sposób:
mASTEr|05 Lipca 2008, 00:00}}!{{miński|09 Lipca 2008, 00:00}}!{{Roy_v_beck|15 Lipca 2008, 00:00
Zależy mi na tym, aby w razie, gdy $_SESSION['zalogowany']='miński'; to powyższy ciąg zostałby wyczyszczony z jego nicku i daty.
mASTEr|05 Lipca 2008, 00:00}}!{{Roy_v_beck|15 Lipca 2008, 00:00

proszę o odpowiedni kod i wyjaśnienie, dziękuję z góry!
bartg
  1. <?php
  2. preg_replace("!{{(.*?)|[0-9]{1,2} [a-zA-Z] [0-9]{1,4}, [0-9]{1,2}:[0-9]{1,2}}}!", '', $passes);
  3. ?>

Pisane z palca.

Down: Ale gafe strzeliłem. Już poprawione smile.gif
webdice
Napisz czy ciąg wygląda tak:

Kod
mASTEr|05 Lipca 2008, 00:00}}!{{miński|09 Lipca 2008, 00:00}}!{{Roy_v_beck|15 Lipca 2008, 00:00


czy

Kod
{{mASTEr|05 Lipca 2008, 00:00}}!{{miński|09 Lipca 2008, 00:00}}!{{Roy_v_beck|15 Lipca 2008, 00:00}}


Cytat(bartg @ 11.03.2008, 22:20:52 ) *
  1. <?php
  2. preg_replace("!{{(.*?)|[0-9]{1,2} [a-zA-Z] [0-9]{1,4}, [0-9]{1,2}:[0-9]{1,2}}}!", $passes);
  3. ?>

Pisane z palca.


Widać, popatrz sobie na liczbę argumentów funkcji preg_replace" title="Zobacz w manualu PHP" target="_manual.
--mASTEr--
  1. <?php
  2. mASTEr|05 Lipca 2008, 00:00}}!{{miński|09 Lipca 2008, 00:00}}!{{Roy_v_beck|15 Lipca 2008, 00:00
  3. ?>

i
  1. <?php
  2. mASTEr|05 Lipca 2008, 00:00}}!{{miński|09 Lipca 2008, 00:00}}!{{Roy_v_beck|15 Lipca 2008, 00:00}}!{{
  3. ?>


, bo przy zastąpieniu w mozliwości nr. 1 Roy_v_beck|15 Lipca 2008, 00:00 na '' to otrzymamy:
  1. <?php
  2. mASTEr|05 Lipca 2008, 00:00}}!{{miński|09 Lipca 2008, 00:00}}!{{
  3. ?>


Zdaje sobie sprawę, że będzie trzeba zrobić 2 przypadki, ale mi zależy na formie przedstawienia NICKU i daty w oparciu o wyrażenia.
--mASTEr--
Czy to będzie poprawnie?

sytuacja 1:
  1. <?php
  2. if (preg_match('/^'.$_SESSION['zalogowany'].'|.*}}!{{$/',$logowanie)) preg_replace('/^'.$_SESSION['zalogowany'].'|.*}}!{{$/','',$logowanie);
  3. ?>

sytuacja 2:
  1. <?php
  2. if (preg_match('/^}}!{{'.$_SESSION['zalogowany'].'|.*$/',$logowanie)) preg_replace('/^}}!{{'.$_SESSION['zalogowany'].'|.*$/','',$logowanie);
  3. ?>
--mASTEr--
Proszę pomóżcie znaleźć przyczynę blędu. Komunikatów o błędzie nie ma, ale mimo to nie działa...
$_SESSION['zalogowany']='mASTEr';
$logowanie='mASTEr| 11 Czerwiec 2008, 10:22}}!{{mASTErek| 12 Czerwiec 2008, 14:22';
Kod
$log=$_SESSION['zalogowany'].'|'.$d.' '.$m.' '.$godz;
$logowanie=preg_replace('/'\}\}!\{\{.$_SESSION['zalogowany'].'\|.*\}\}!\{\{/',$log,$logowanie);


zależy mi na odszukaniu miejsca, w którym występuje nick z sesji i daty i zastąpienie go zawartością $log.

Za pomoc dziękuję
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.