Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PCRE] preg_match_all - Fraza w przeczeniu
starach
post
Post #1





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

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


Witam.
Chciałbym wykorzystać w przeczeniu (^), nie pojedynczy znak tylko frazę.
  1. <?php
  2. $source = 'tak asdfafasf tak saafdafaf tak';
  3. $pattern = '#tak([^tak]*)tak#';
  4. preg_match_all($pattern, $source, $matches);
  5. var_dump($matches);
  6. ?>
Tak jak jest powyżej nie działa. Jak napiszę [^(tak)]* też nie działa.
Więc jak to zrobić ?

Ten post edytował orglee 9.01.2008, 15:37:58
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
starach
post
Post #2





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

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


Wczoraj w akcie desperacji wysłałem do autora tego komentarza mejla odpowiedź która przyszła wyjaśniała założenia tego wzorca niestety w bardzo ubogi sposób. Dziękuję zimi wreszcie zaczynam łapać o co chodzi.
Zrozumiałem coś takiego:
Rekurencja działa od środka to znaczy w przypadku tagów pobiera najpierw
Cytat
$str = "<div>bbdiv>bbbb</div><div>b<div>bbbb</div>bbb</div>bb</div>";

czyli część środkową potem wkleja to w miejsce (?R) i sprawdza znowu. Czyli działa od środka na zewnątrz mam rację ?
Teraz sprawa twojego wzorca. Wynik jaki otrzymuję jest identyczny jak w przykładzie z komentarza, teraz prosiłbym o powiedzenie mi czy dobrze go rozumiem.
"@<div>(?(?=</?div>)(?R)|.)+</div>@"
@<div> - bez przesady to chyba rozumiem (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
@<div>(? - jeśli dopasowałeś <div> sprawdzaj dalej
@<div>(?(?=</?div>) - Kolejna część ma się równać </?div> natomiast w tym znak zapytania sprawdza czy zostało dopasowane </ i jeśli tak każe kontynuować
(?R) - Wklej tutaj to co będzie wynikiem (?(?=</?div>)(?R)|.)+
Dobra a teraz gdzie popełniłem błąd ? hehe

Ten post edytował orglee 10.01.2008, 13:55:42
Go to the top of the page
+Quote Post

Posty w temacie


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: 12.10.2025 - 05:42