Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: preg_match_all
Forum PHP.pl > Forum > PHP
MitS
Witam serdecznie,

Mam mały problem z wyrażeniami regularnymi w preg_match_all.
Otóż pisze sobie funkcję (podam okrojoną wersję):

  1. <?php
  2. function fun($string, $cWords = ''){
  3. @preg_match_all("@{[^.]+}@", $string, $argc);
  4. echo '<pre>';
  5. print_r($argc);
  6. echo '<pre>';
  7. }
  8.  
  9. $text = 'To jest {dobry|super|wspaniały|cudowny}, przykładowy tekst z różnymi tagami. I c
    hciałbym go {wykasowac|wyrzucic|uciąć|wywalić} i dalej i dalej.'
    ;
  10. echo '1.<br />';
  11. fun($text, 3);
  12.  
  13. echo '2.<br />';
  14. $text = 'Był sobie raz {król|królowa|książe|królewna}, którzy żyli sobie w {mieście|króle
    stwie|dolinie|górach} i panowali przez 1000 lat.'
    ;
  15. fun($text, 3);
  16. ?>


moje pytanie brzmi:
czemu dla pierwszego przypadku preg_match_all działa dobrze tzn. wyłapuje wszystkie wyrażenia w zdaniu które są między: {}
i efektem jest tablica

  1. <?php
  2. (
  3. [0] => Array
  4. (
  5. [0] => {dobry|super|wspaniały|cudowny}
  6. [1] => {wykasowac|wyrzucic|uciąć|wywalić}
  7. )
  8. )
  9. ?>


zaś dla drgiego przypadku dziala zle tzn. efektem jest błędna tablica:
  1. <?php
  2. (
  3. [0] => Array
  4. (
  5. [0] => {król|królowa|książe|królewna}, którzy żyli sobie w {mieście|królestwie|dolinie|górach}
  6. )
  7. )
  8. ?>


questionmark.gif
czy można to w prosty sposob naprawic ? prosiłbym bardzo o odpowiedź.
ayeo
Poczytaj o zachłanności i o znaku "?"

Pozdrawiam!
MitS
kurcze co masz na myśli zachłanność ? (bo nie mogę znaleźć w google - może źle formułuje pytania ?!)
zaś znak "?" słóży do tego że może coś być ale nie musi.

PS. trochę wyedytowałem posta czy nadal ta zachłanność i "?" tyczy się tego co powyżej ?
Shili
http://grabun.com/wyrazenia-regularne/zachlannosc/
Pierwszy link w google pod frazą: zachłanność wyrażenia regularne.
Po angielsku: greedy regular espressions
dr_bonzo
@preg_match_all("@\{[^.]+?\}@", $string, $argc);
MitS
rozwiązaniem było: preg_match_all("@{[^{]+}@", $string, $argc); dzięki za linka.
Pozdrawiam
ayeo
a co jeśli:
  1. <?php
  2. $text = 'To jest {dobry|super|{|wspaniały|cudowny}, przykładowy tekst z.....';
  3. ?>



Przeczytaj dokładniej rady wyżej smile.gif


Pozdrawiam!
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.