Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wyrazenia regularne, zagniezdzone... zobacz sam :)
hwao
post
Post #1


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




Witam.

Sam juz zglupialem winksmiley.jpg potrzebuje wyrazenia ktore ztakiego ciagu

String [x] troszke tekstu [x] a tu juz bardzije [/x] a tu dalej [/x] costam [x] calkiem nowego [/x] nie istotne dalej


i teraz ma to zlapac tak

String [x] troszke tekstu [x] a tu juz bardzije [/x] a tu dalej [/x] costam [x] calkiem nowego [/x] nie istotne dalej

W zasadzie to ma dzialac tak :


String
Cytat
troszke tekstu
Cytat
a tu juz bardzije
a tu dalej
costam
Cytat
calkiem nowego
nie istotne dalej

Tzn wyrazenie ma byc na tyle inteligente ze jak zobaczy ze w sorku jest taki sam znacznik to nie lapie go odrazu tylko czeka do nastepnego czyli lapie tak

[x] costam [x]nowee[/x] costam[/x] string [x]ble ble[/x] costam

do tej pory udalo mi sie tylko uzyskac

[x] costam [x]nowee[/x] costam[/x] string [x]ble ble[/x] costam

albo tak


[x] costam [x]nowee[/x] costam[/x] string [x]ble ble[/x] costam

oczywiscie obydwa sa bledne... jakies pomysly?

(chce poprostu zlapac)

[x] costam [x]nowee[/x] costam[/x] string [x]ble ble[/x] costam

(z tym ze nie wiem czy cos nie jest zagniezdzone w srodku i w tym caly problem)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
FiDO
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

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


To juz jest troche hardcore.. trzebaby uzyc rekurencyjnych wyrazen i w dodatku asercji.. Narazie udalo mi sie cos takiego:

  1. <?php
  2.  
  3. $string = "String [x] troszke tekstu [x] [...]";
  4.  
  5. preg_match_all("#[x] ( (?: (?:[^]]+) | (?R) )* ) [/x]#x", 
  6.                $string, $matches, PREG_SET_ORDER);
  7.  
  8. var_dump($string, $matches);
  9.  
  10. ?>

Niestety wylozy sie to w momencie, gdy umiescisz normalnie w tekscie znak ] (np. jakis inny tag)

~edit:

Udalo mi sie troche to poprawic z uzyciem asercji, nowe wyrazenie wyglada tak:
Kod
#\\[x] ( (?: (?R) | (?:.*?(?!/x])) )* ) \\[/x]#x


Jest juz prawie idealnie.. tym razem wylozy sie jak umiescisz normalnie w tekscie /x], ale raczej nie powinno sie zdarzyc. Inne tagi moga teraz byc dowolnie w tym zagniezdzone. Niestety z nieznanych mi powodow, gdy dolozylem w tej asercji z przodu brakujacy [ (oczywiscie poprzedzony \) to nie chce dzialac.

~edit:
Ha.. mam gada aaevil.gif

Kod
#\\[x] ( (?: (?R) | (?:.*?(?!\\\[/x])) )* ) \\[/x]#x


Nie wiem tylko troche dlaczego w asercji konieczny byl jeszcze jeden dodatkowy backslash.. ale nie zmienia to faktu, ze dziala.


--------------------
Brak czasu :/
Go to the top of the page
+Quote Post
hwao
post
Post #3


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




dzieki smile.gif

Niezly hardcore smile.gif sam bym tego nie wymyślił
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 Aktualny czas: 19.08.2025 - 22:50