![]() |
![]() |
![]()
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
![]() [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%) ![]() ![]() |
-------------------- pozdrawiam bamboos
http://piorun.ds.pg.gda.pl/~ronek/log/jedyne.wma |
|
|
![]()
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 -------------------- „Człowiek jest wielki nie przez to, co posiada, lecz przez to, kim jest;
nie przez to, co ma, lecz przez to, czym dzieli się z innymi.” Jan Paweł II |
|
|
![]()
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 ![]() Dzięki wszystkim! |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 26.06.2025 - 20:00 |