Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php]Wyrażenie regularne
--mASTEr--
post
Post #1





Goście







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!
Powód edycji: dodalem tag (cysiaczek)
Go to the top of the page
+Quote Post
bartg
post
Post #2





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

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


  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

Ten post edytował bartg 12.03.2008, 20:58:37


--------------------
Go to the top of the page
+Quote Post
webdice
post
Post #3


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




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.
Go to the top of the page
+Quote Post
---mASTEr---
post
Post #4





Goście







  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.
Go to the top of the page
+Quote Post
---mASTEr---
post
Post #5





Goście







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. ?>
Go to the top of the page
+Quote Post
---mASTEr---
post
Post #6





Goście







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ę
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:07