Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wyszukanie i pobranie danych ze stringa
Fallout
post 13.11.2006, 01:05:20
Post #1





Grupa: Zarejestrowani
Postów: 154
Pomógł: 0
Dołączył: 17.12.2003
Skąd: Olsztyn

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


Witam,

Natknąłem się na taki problem:

Pobieram z bazy tekst i muszę znaleść w nim wszystkie wystąpienia {%$zmienna%}
gdzie słowo "zmienna" może być dowolne.

I teraz chcę takie wystąpienie porównać z moją listą dopuszczonych "zmiennych"
i w przypadku gdy jest nieprawidłowe zostanie zastąpione słowem error. Dziwnie to brzmi więc napisze to tak:

1. pobieram tekst z bazy do zmiennej
2. wyszukuje wystapienia "{%...%}" (czyli zawartosci miedzy tymi nawiasami klamrowymi z procentem
3. w przypadku gdy zawartość jest inna niż dopuszczone zostaje tam wpisane $error
4. do pkt 2. aż do wyczerpania wystąpień.

dla przykładu:

{%$link%} jest pożądane więc przejdzie
{%$majtki%} nie ma na whiteliście więc zostanie zastąpione {%$error%}
{%cokolwiek_innego_wpisze%} to samo co wyżej.

tzn mam teoretyczne rozwiazanie

wyszukać pozycję {% i %}
pobrać zawartość spomiędzy nich
porównać
zamienić wartość

ale to tylko w teorii ładnie wygląda i dla sporego tekstu będzie strasznie ślamazarne a takich wywołań będzie sporo, jest jakiś normalny sposób na to??

pozdrawiam


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
UDAT
post 13.11.2006, 08:40:46
Post #2





Grupa: Zarejestrowani
Postów: 442
Pomógł: 0
Dołączył: 27.12.2005

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


  1. <?php
  2. /**
  3. * Returns an array containing each of the sub-strings from text that
  4. * are between openingMarker and closingMarker. The text from 
  5. * openingMarker and closingMarker are not included in the result.
  6. * This function does not support nesting of markers.
  7. * @param string $text
  8. * @param string $openingMarker
  9. * @param string $closingMarker
  10. * @return string
  11. */
  12.  function returnSubstrings($text, $openingMarker, $closingMarker) {
  13. $openingMarkerLength = strlen($openingMarker);
  14. $closingMarkerLength = strlen($closingMarker);
  15.  
  16. $result = array();
  17. $position = 0;
  18.  
  19. while ( ( $position = strpos( $text, $openingMarker, $position ) ) !== false ) {
  20. $position += $openingMarkerLength;
  21.  
  22. if ( ( $closingMarkerPosition = strpos( $text, $closingMarker, $position ) ) !== false ) {
  23. $result[ ] = substr( $text, $position, $closingMarkerPosition - $position );
  24. $position = $closingMarkerPosition;
  25. }
  26. }
  27.  
  28. return $result;
  29. }
  30. ?>


Ten algorytm przejedzie cały tekst raz ( jak dobrze zaimplementujesz ), więc będzie szybki
Go to the top of the page
+Quote Post
Fallout
post 13.11.2006, 16:19:54
Post #3





Grupa: Zarejestrowani
Postów: 154
Pomógł: 0
Dołączył: 17.12.2003
Skąd: Olsztyn

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


Dzięki, oto chodziło smile.gif


--------------------
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 - 00:57