Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyrażenia regularne
Forum PHP.pl > Forum > PHP
Aztech
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
piczu
  1. <?php
  2. $receivers = preg_split("/W+/", $receiverList, -1, PREG_SPLIT_NO_EMPTY);
  3. ?>

nie wiem czy dziala, nie sprawdzalem
bendi
  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
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.