Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> preg_match_all
MitS
post
Post #1





Grupa: Zarejestrowani
Postów: 262
Pomógł: 5
Dołączył: 8.02.2005
Skąd: Olsztyn / Zatorze

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


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. ?>


(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
czy można to w prosty sposob naprawic ? prosiłbym bardzo o odpowiedź.

Ten post edytował MitS 17.06.2008, 13:07:27
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
ayeo
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

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


Poczytaj o zachłanności i o znaku "?"

Pozdrawiam!
Go to the top of the page
+Quote Post
MitS
post
Post #3





Grupa: Zarejestrowani
Postów: 262
Pomógł: 5
Dołączył: 8.02.2005
Skąd: Olsztyn / Zatorze

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


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 ?
Go to the top of the page
+Quote Post
Shili
post
Post #4





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

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


http://grabun.com/wyrazenia-regularne/zachlannosc/
Pierwszy link w google pod frazą: zachłanność wyrażenia regularne.
Po angielsku: greedy regular espressions

Ten post edytował Shili 17.06.2008, 13:28:23
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


@preg_match_all("@\{[^.]+?\}@", $string, $argc);
Go to the top of the page
+Quote Post
MitS
post
Post #6





Grupa: Zarejestrowani
Postów: 262
Pomógł: 5
Dołączył: 8.02.2005
Skąd: Olsztyn / Zatorze

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


rozwiązaniem było: preg_match_all("@{[^{]+}@", $string, $argc); dzięki za linka.
Pozdrawiam

Ten post edytował MitS 17.06.2008, 13:37:51
Go to the top of the page
+Quote Post
ayeo
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

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


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)


Pozdrawiam!
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.12.2025 - 07:53