Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyrazenia regularne
Forum PHP.pl > Forum > PHP
hwao
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)
FiDO
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.
hwao
dzieki smile.gif

Niezly hardcore smile.gif sam bym tego nie wymyślił
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.