Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyrażenie regularne - "odwrócenie" wzorca i tekstu
Forum PHP.pl > Forum > PHP
phpion
Witam,
czy jest jakiś w miarę prosty sposób aby mając tablicę z elementami:
  1. $routes = array(
  2. 'page/([A-z]+)' => 'page/display?slug=$1'
  3. );

dokonać "odwrócenia" wzorca i tekstu tj. zrobić z powyższego:
  1. $routes = array(
  2. 'page/$1' => 'page/display?slug=([A-z]+)'
  3. );

Może powiem do czego jest mi to potrzebne (może jest na to lepsza metoda). Otóż chciałbym generować linki na podstawie tablicy $routes czyli podaję np. page/display?slug=podstrona, w wyniku czego otrzymuję page/podstrona. Dokonując taką podmianę mógłbym sprawdzić czy adres pasuje do nowego (odwróconego) wzorca.

Coś takiego jest w Symfony, ale przeglądanie źródeł jak na razie niewiele mi pomogło (w sumie to nic konkretnego nie znalazłem).

Proszę o jakieś wskazówki jak to najlepiej ugryźć.

Pozdrawiam,
pion
Fifi209
To proste haha.gif

  1. <?php
  2.  
  3. $routes = array(
  4. 'page/([A-z]+)' => 'page/display?slug=$1'
  5. );
  6.  
  7. function change($array) {
  8. $arr = array();
  9. foreach ($array as $key => $value) {
  10. $x = substr($value, strpos($value, '/'));
  11. $y = substr($key, strpos($key, '/'));
  12. $arr['page'.$x] = 'page'.$y;
  13. }
  14. return $arr;
  15. }
  16.  
  17. echo '<pre>';
  18. print_r($routes);
  19. echo '</pre>';
  20.  
  21. echo '<pre>';
  22. print_r(change($routes));
  23.  
  24. ?>
destroyerr
symfony samo buduje wyrażenie regularne, więc możesz rozważyć użycie całego routingu z symfony. Jeśli jednak koniecznie nie chcesz takiego rozwiązania, to zajrzyj do agavi, tam na podstawie zdefiniowanego wyrażenia regularnego sam wyciąga zmienne i tworzy odpowiedni format do łatwej podmiany parametrów.
AgaviRouting::parseRouteString
seth-kk
mozesz tez uzyc preg_match_all do wyciagniecia wartosci (3ci parametr) w nawiasach i dolarow oraz w petli preg_replace() z limitem (4ty parametr) do zamiany ich miejscami
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.