Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> wyrażenia regularne
raf_gc
post 19.05.2006, 12:17:06
Post #1





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 12.05.2006

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


Powidzmy, że mam w szblonie strony pewne zmienne które bede zastępował póżniej odpowiednimi kodem HTML. Jak na razie mam dwie zmienne:

%field:menu% oraz %output%

Jak to zrobić, a by stworzyć tablicę zawierającą wszystkie ciągi %field:.*%?

Szablon całkowicie znajduje się w zmiennej $template i gdy wykonuję:

  1. <?php
  2. eregi("%field:.*%", $template, $result);
  3. echo $result[0];
  4. ?>


To wyświetla mi się %field:menu%<html..........>%output%, a ja chcę aby wyświetliło mi się tylko %field:menu%.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
mariuszn3
post 19.05.2006, 13:26:22
Post #2





Grupa: Zarejestrowani
Postów: 352
Pomógł: 0
Dołączył: 22.01.2006

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


Sama '*' będzie brała wszystko jak leci chciwie (greedy).. musisz narzucić tak zwany leniwy (lazy) tryb czyli dodać '?' tak by się zatrzymała jesli dalsza częsć wyrażenia, będzie się zgadzać. Ostatecznie:
Kod
%field:.*?%
Go to the top of the page
+Quote Post
raf_gc
post 20.05.2006, 14:39:09
Post #3





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 12.05.2006

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


Niestety po użyciu %field:.*?% ukazuje się błąd:

php Warning: eregi() [function.eregi]: REG_BADRPT in G:\wwwroot\raf\index.php on line 23

a przy użyciu %field:.?% otrzymuję pustą tablicę.
Go to the top of the page
+Quote Post
mariuszn3
post 21.05.2006, 11:07:21
Post #4





Grupa: Zarejestrowani
Postów: 352
Pomógł: 0
Dołączył: 22.01.2006

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


Cytat(raf_gc @ 2006-05-20 13:39:09)
Niestety po użyciu %field:.*?% ukazuje się błąd:

php Warning: eregi() [function.eregi]: REG_BADRPT in G:\wwwroot\raf\index.php on line 23

a przy użyciu %field:.?% otrzymuję pustą tablicę.

no tak.. wyrażenia regularne oparte na POSIX'ie mają dużo ograniczeń. Skorzystaj z alternatywnego zbioru funkcji (PCRE). Tam odpowiednikiem będzie preg_match():
  1. <?php
  2.  
  3. preg_match('/%field:.*?%/i', $template, $result)
  4.  
  5. ?>
Go to the top of the page
+Quote Post
raf_gc
post 21.05.2006, 11:20:49
Post #5





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 12.05.2006

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


Dzięki, jeden krok do przodu, ale jeśli umieszczę w szablonie strony następną zmienną %field:data% to po wykonaniu var_dump($result) otrzymuję tylko
array(1) { [0]=> string(12) "%field:menu%" }
a powinny być dwa dopasowania, chyba, że jestem w błędzie.

P.s Czy znacie jakiś dobry kurs wyrażeń regularnych PCRE?
Go to the top of the page
+Quote Post
matrach
post 21.05.2006, 11:26:55
Post #6





Grupa: Zarejestrowani
Postów: 92
Pomógł: 0
Dołączył: 17.04.2006

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


Cytat(raf_gc @ 2006-05-21 12:20:49)
jeśli umieszczę w szablonie strony następną zmienną %field:data%  to po wykonaniu var_dump($result) otrzymuję tylko
array(1) { [0]=> string(12) "%field:menu%" }
a powinny być dwa dopasowania, chyba, że jestem w błędzie.

o_s%C4%85_wyra%C5%BCenia_regularne_i_do_czego_s%C5%82u%C5%BC%C4%85%3F' target='_blank

Ten post edytował matrach 21.05.2006, 11:31:18
Go to the top of the page
+Quote Post
raf_gc
post 21.05.2006, 11:43:11
Post #7





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 12.05.2006

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


Dziękuję serdecznie! Dokładnie o to mi chodziło!
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: 6.07.2025 - 21:50