![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 0 Dołączył: 20.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
Eh... wysiadam. :cry: Próbuję wymęczyć pewne wyrażenie regularne.
Kod /<poczatek>(.*)</koniec>/Us
Chodzi o to, żeby powyższe wyrażenie nie dopasowywało ciągów, w których pomiędzy tagami <poczatek> i </koniec> wystapi znów tag <poczatek>. Próbowałem wszystkich sposobów, ale nie wiem jak wyłączyć z ciagu cały wyraz, a nie pojedyńcze znaki. Pomóżcie, proszę! |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 225 Pomógł: 18 Dołączył: 30.06.2003 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
też miałem ten problem (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) . Oto rozwiązanie:
[php:1:2a0309cc3a]<?php $text = '1 slowo [ php ]1 kod[ /php ] 2 slowo [ php ]2 kod[ /php ] 3 slowo'; preg_match_all("# #i", $text, $matches); print_r($matches); ?>[/php:1:2a0309cc3a] Wynik jest w tablicy $matches... Poczytaj jeszcze o samej funkcji preg_match_all, bo ma opcjonalny parametr który często się przydaje... ?>[/php] |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 0 Dołączył: 20.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
Hm... nie całkiem o to mi chodziło. To faktycznie działa w takim przypadku, jaki ty podałeś, ale tylko kiedy jedno [ php ] nie jest zagłebione w drugim.
Chodzi o to, zeby w takim na przykład kodzie: [xml:1:77b8cfc704]<ztpl:if condition="1"> kod 1 </ztpl:if><ztpl:else> <ztpl:include element="category_hidden" /> <ztpl:if condition="1"> kod 2 </ztpl:if><ztpl:else> kod 3 </ztpl:else> kod 4 </ztpl:else>[/xml:1:77b8cfc704] Wyszukało najpierw to wewnętrzne if (które nie zawiera w sobie żadnego innego), wykonało odpowiednią fukcję, a póżniej wyszukało kolejne, wyższe w hierarchi. Kiedy używam tak jak napisałeś: [php:1:77b8cfc704]<?php preg_match_all('/<ztpl:if condition="(.*?)">(.*?)</ztpl:if><ztpl:else>(.*?)</ztpl:else>/Us', $tmp_el, $commands_m, PREG_SET_ORDER); ?>[/php:1:77b8cfc704] lub bez U, to dopasowuje mi wyrażenie nie całkiem tak jak powinno - sprawdź zresztą sam. Chodzi mi konkretnie o wyłączenie całego wyrazu z wyrażenia. Ma ktoś jeszcze jakiś pomysł? |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 0 Dołączył: 20.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
Nikt nic nie wie na ten temat? To jest mi naprawdę potrzebne...
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 115 Pomógł: 0 Dołączył: 3.05.2003 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 581 Pomógł: 0 Dołączył: 21.07.2003 Skąd: Jasło Ostrzeżenie: (0%) ![]() ![]() |
niewiem może masz link do manuala ale podam
http://pl.php.net/manual/pl/function.ereg-replace.php |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 0 Dołączył: 20.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
bamboos << Problem był podobny, ale mi chodzi o wyciaganie tego przez preg_match_all i późniejszą zamianę, próbowałem to co podałeś przerobić... ale niezbyt chciało wychodzić.
kubatron << Znam manual 8) . Część o wyrażeniach też. 8) Ale wykombinowałem. Trochę na odwrót i dłużej, ale się udało: [php:1:4a776f80c8]<?php preg_match_all('/<ztpl:if condition="(.[^"]*?)">((?(?=.*<ztpl:if.*).[^ztpl:if]*|.*))</ztpl:if><ztpl:else>((?(?=.*<ztpl:if.*).[^ztpl:if]*|.*))</ztpl:else>/Us', $tmp_el, $commands_m, PREG_SET_ORDER); ?>[/php:1:4a776f80c8] Zastsosowałem wyrażenie warunkowe (?(?=...)...|...) i nawet działa dobrze (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) Dzięki wszystkim! |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 12:59 |