Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] wyrażenia regularne w tablicy
--asd--
post 30.05.2012, 20:29:03
Post #1





Goście







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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
by_ikar
post 31.05.2012, 08:44:10
Post #2





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


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 to the top of the page
+Quote Post
-Gość-
post 31.05.2012, 09:25:36
Post #3





Goście







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.
Go to the top of the page
+Quote Post
by_ikar
post 31.05.2012, 10:16:46
Post #4





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


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.

Ten post edytował by_ikar 31.05.2012, 10:17:51
Go to the top of the page
+Quote Post
-Gość-
post 31.05.2012, 10:23:56
Post #5





Goście







Niby tak, ale tablice jest łatwiej edytować i ogólnie jest bardziej przejrzysta. Dlatego chce oprzeć rozwiązanie właśnie na niej.
Go to the top of the page
+Quote Post
-Gość-
post 31.05.2012, 12:41:05
Post #6





Goście







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.
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: 14.08.2025 - 03:40