Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyrażenie regularne
Forum PHP.pl > Forum > PHP
batman
Witam

Mam taki ciąg:

[page_title] [page_menu] [page_body]

i wyrażenie:

  1. <?php
  2. preg_match_all('/[(.*)]/',$methods,$aout);
  3. ?>


Przed "[" i "]" znajdują się "\".

Do tablicy zapisuje mi takie coś:

Kod
Array
(
    [0] => Array
        (
            [0] => [page_title]
            [1] => [page_menu]
            [2] => [page_body]
        )

    [1] => Array
        (
            [0] => page_title
            [1] => page_menu
            [2] => page_body
        )

)


a chciałbym, by zapisywało tylko nazwy między "[" i "]". Co jest nie tak ?

EDIT
Chyba znalazłem rozwiązanie problemu. Tak jak napisał @hwao jest dodatkowy parametr, który należy ustawić. Jak się upewnię, że działa, to przedstawię rozwiązanie.
1010
to obcinaj z tego co ci zwroci jeden znak z przodu i jeden z tylu i bedziesz mial to co chcial...
do tego polecam funkcje substr()
Link do manuala: http://pl.php.net/manual/pl/function.substr.php
batman
Sądzę, że nie jest to najlepsze rozwiązanie. Po to stosuję wyrażenie regularne, by nie bawić się w inne operacje na ciągach. Nie jestem najlepszy w wyrażenia regularne, ale wiem, że można wyjąć ciąg znajdujący się między jakimiś znakami. Wyciąga mi, ale efekt nie jest taki jaki oczekiwałem.
sf
przecież zapisuje w [1] dobre nazwy... więc w czym problem? a jak przeszkadza Ci to [0] dodatkowo to wystarczy array_pop ...
batman
Cytat
przecież zapisuje w [1] dobre nazwy... więc w czym problem? a jak przeszkadza Ci to [0] dodatkowo to wystarczy array_pop ...


Po to by nie bawić się obrabianie wyniku. Nie potrzebuję innych elementów tablicy.
1010
tu ci zwraca tak jak chcesz przeciez:

[1] => Array
(
[0] => page_title
[1] => page_menu
[2] => page_body
)

masz to w tablicy $zmienna[1];
batman
By było jasne. Efekt, jaki próbuję uzyskać to:

Kod
Array
        (
            [0] => page_title
            [1] => page_menu
            [2] => page_body
        )


Nie chcę wyciągać podtablicy, wycinać znaków i wykonywać jakichkolwiek operacji na tej tablicy.
1010
  1. <?php
  2. $twoja_tablica = $tablica[1];
  3. ?>

i masz to co chcesz
batman
Najwyraźniej masz problemy ze zrozumieniem mojego pytania. Napiszę, więc jeszcze raz.

Jak uzyskać przy pomocy wyrażenia regularnego (gdzie się pomyliłem) efekt opisany w moim poprzednim poście.
1010
To chyba nie możliwe, a napewno nie przy pomocy funkcji preg_match_all. A co to za różnica?
sf
@batman: napisz sobie w c, skompiluj, dodaj jako moduł i użyj batman_preg_match_all biggrin.gif
1010
hehe biggrin.gif ale chyba pierwsze rozwiązanie jest bardziej optymalne biggrin.gif
batman
@sf
Hehe. Na to nie wpadłem. Chyba tak zrobię winksmiley.jpg
1010
zastanów sie tylko "po co?"
batman
@1010
Ty piszesz na poważnie, czy tylko posty nabijasz ?
1010
pisze na poważnie... powiedz mi co w tej funkcji preg_match_all jest ci takiego nie na rękę?
batman
Załóżmy, że masz pętle for, która iteruje przez 100 elementów. Ty potrzebujesz, by iterowała przez 80 elementów. Jak to zrobisz? Napiszesz warunek w pętli

  1. <?php
  2. if($i>= 80) break;
  3. ?>


czy zmniejszysz licznik do 80?

Zanim odpiszesz zastanów się czy dobrze zrozumiałeś.
hwao
wracajac do pytania z poczatku.

Pod zerowym kluczem zwracaly jest caly ciag ktory pasuje do wyrazenia, w nastepnych sa kolejno etomy. Z tego co sie orientuje to chyba byla jakas flaga ktora powodowala ze nie jest zwracany caly ciag pasujacy do wyrazenia, tylko atomy. Porozgladaj sie po flagach
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.