Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] wyrażenia regularne w tablicy
Forum PHP.pl > Forum > Przedszkole
-asd-
Posiadam tablicę z wyrażeniami regularnymi

  1. $reg = array(
  2. '' => array();
  3. 'aa([0-9])' => array(),
  4. 'aa\/([a-z])' => array(),
  5. 'ccc' => array(),
  6. );


Jak najwydajniej sprawdzić czy zmienna do jakiegoś pasuje? Zrobiłem tak:



  1. $stringDoSprawdzenia = 'aa9';
  2. foreach($reg as $key => $value)
  3. {
  4. if(is_string($key))
  5. {
  6. $regex = '/^'.$key.'$/';
  7.  
  8. if(preg_match($regex, $stringDoSprawdzenia))
  9. {
  10. echo $key.'<br/>';
  11. break;
  12. }
  13.  
  14. }
  15. else
  16. {
  17. unset($key);
  18. }
  19. }


Jednak czy to jest jedyny sposób? Dlaczego muszę pisać $key => $value? Skoro nie operuję w foreach na waściwościach kluczy.
by_ikar
Cytat
Dlaczego muszę pisać $key => $value? Skoro nie operuję w foreach na waściwościach kluczy.


Bo masz tablicę asocjacyjną, gdzie kluczami są twoje wyrażenia. Zatem żeby się do nich dostać, musisz użyć $key => $val (nazwy zmiennych są przykładowe).

Można to zrobić bez pętli, ale jedynie za pomocą preg_replace, lub preg_replace_callback. Wtedy możesz podać swoje wyrażenie jako tablicę. Wszystko zależy od tego co konkretnie próbujesz uzyskać. Napisz, może można to łatwiej rozwiązać.
Gość
Chciałbym sprawdzić czy zmienna pasuje do któregoś wyrażenia, i zapisać je do innej zmiennej. Mam jeszcze pytanie, co w wyrażeniach np. aa\/([a-z]+) oznacza plus? Bo jeśli go nie ma, to czasami zwraca false.
by_ikar
Plus oznacza "jeden lub więcej". Nie musisz używać do tego zarówno tablicy, jak i kilku wyrażeń bo możesz to zrobić w jednym wyrażeniu używając coś na wzór "else" z php:

  1. <?php
  2.  
  3. $stringDoSprawdzenia = 'aa9';
  4.  
  5. $regex = '/^aa([0-9])|aa\/([a-z]+)|ccc/i';
  6. $pasujace = '';
  7.  
  8. if(preg_match($regex, $stringDoSprawdzenia, $matches))
  9. {
  10. $pasujace = $matches[0];
  11. }
  12.  
  13. var_dump($pasujace);


Sposobów na rozwiązanie tego jest jeszcze conajmniej kilka.
Gość
Niby tak, ale tablice jest łatwiej edytować i ogólnie jest bardziej przejrzysta. Dlatego chce oprzeć rozwiązanie właśnie na niej.
Gość
Chodzi mi o to że chce mieć tablicę, która ma w sobie wyrażenia regularne, do każdego z takiego wyrażenia są przypisane odpowiednie wartości. Gdy przepuszczam tablicę przez foreach chce aby wyrażenie które pasuje do zmiennej, było zapisywane w osobnej zmiennej aby móc się do tego odwołać w dalszej części kodu.
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.