Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wyrażenia regularne, prośba o usprawnienie wyrażenia
Aztech
post 2.07.2006, 15:13:50
Post #1





Grupa: Zarejestrowani
Postów: 276
Pomógł: 3
Dołączył: 22.10.2003
Skąd: Wrocław

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


Mam dane, które przesyła mi użytkownik, jest to lista użytkowników ($receiverList) do których chce on wysłać wiadomość w jakimś tam systemie. Poszczególni użytkownicy mogą być oddzieleni od siebie spacją, przecinkiem, średnikiem (jak wiadomo użytkownik może pomieszać, jdeden oddzieli spacją drugi przecinkiem itp). Chciałbym za pomocą wyrażenia regualrnego otrzymać tablicę w której będę miał tylko nazwy użytkowników ($receivers).

Robię to w ten sposób (i działa, prawie idealnie, bo preg_split dzieli mi potem tak, że po ostatnim średniku powstaje mi zerowy łańcuch - patrz też pytanie 2) na końcu):
  1. <?php
  2. //ciąg testowy
  3. $receiverList = 'username1, username3; username5  username55;';
  4. echo 'ciąg testowy:<BR>'.$receiverList.'<BR>';
  5. //wytnij spacje oraz przecinki i zastąp średnikami
  6. $receiverList = preg_replace('[s|,]',';',$receiverList);
  7. echo 'po zastapieniu spacji i przecinków:<BR>'.$receiverList.'<BR>';
  8. //zastąp powtórzenia średników jednym średnikiem
  9. $receiverList = preg_replace('[;;*]',';',$receiverList);
  10. echo 'po usunięciu średników:<BR>'.$receiverList.'<BR>';  
  11. //podzielenie ze względu na średniki i zapisz w tablicę
  12. $receivers = preg_split('[;]',$receiverList);
  13. echo 'końcowa tablica<br>';
  14. var_dump($receivers);
  15. ?>


Pytanie:
1) czy da się prościej?
2) czy da się wyeliminować ten średnik z końca, bo jeśli jest to robi mi się coś takiego:
Cytat
array(5) { [0]=> string(9) "username1" [1]=> string(9) "username3" [2]=> string(9) "username5" [3]=> string(10) "username55" [4]=> string(0) "" }

3) może jakieś inne pomysły?

Za wszelką pomoc z góry dzięki

P.S. Próbowałem zrobić preg_split z wyrażeniem: [^:alnum:] - podziel według znaków niealfanumerycznych ale nie bardzo to mi wyszło

Ten post edytował Aztech 2.07.2006, 15:16:51
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
piczu
post 2.07.2006, 16:39:25
Post #2





Grupa: Zarejestrowani
Postów: 182
Pomógł: 0
Dołączył: 4.01.2005
Skąd: piczu.info

Ostrzeżenie: (10%)
X----


  1. <?php
  2. $receivers = preg_split("/W+/", $receiverList, -1, PREG_SPLIT_NO_EMPTY);
  3. ?>

nie wiem czy dziala, nie sprawdzalem


--------------------
pozdrawiam :)
Go to the top of the page
+Quote Post
bendi
post 2.07.2006, 16:43:25
Post #3





Grupa: Zarejestrowani
Postów: 401
Pomógł: 5
Dołączył: 14.09.2003
Skąd: Wrocław

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


  1. <?php
  2.  
  3. $receiverList = 'username1, username3; username5  username55;';
  4. print_r( preg_split( '/[s,;]+/', $receiverList, -1, PREG_SPLIT_NO_EMPTY ) );
  5.  
  6. ?>


Ale piczu był pierwszy 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 Wersja Lo-Fi Aktualny czas: 24.07.2025 - 16:05