Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [regex] Wyłączanie całego wyrazu z wyrażenia
Zakrn
post 1.01.2004, 00:52:29
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ę!
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
zulus
post 1.01.2004, 10:44:15
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 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("#
  1. <?php
  2. (.*?)
  3. ?>
#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]


--------------------
Go to the top of the page
+Quote Post
Zakrn
post 1.01.2004, 11:08:35
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ł?
Go to the top of the page
+Quote Post
Zakrn
post 2.01.2004, 23:29:04
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...
Go to the top of the page
+Quote Post
bamboos
post 3.01.2004, 02:12:13
Post #5





Grupa: Zarejestrowani
Postów: 115
Pomógł: 0
Dołączył: 3.05.2003
Skąd: Łódź

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


Witam!!
Może tu coś znajdziesz, bo problem był podobny:
http://forum.php.pl/viewtopic.php?t=6041


--------------------
Go to the top of the page
+Quote Post
kubatron
post 3.01.2004, 11:54:04
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
Go to the top of the page
+Quote Post
Zakrn
post 3.01.2004, 13:52:34
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 biggrin.gif
Dzięki wszystkim!
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 26.06.2025 - 20:00