Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] wyrażenie regularne
Forum PHP.pl > Forum > Przedszkole
Immanuel
Witam,

Mam taki ciąg znaków:

aaa bbb ccc aaa ddd ccc aaa eee ccc aaa fff ccc

Jak z tego wyciąć: bbb, ddd, eee, fff; które znajdują się pomiędzy aaa i ccc ?
Jest jakaś funkcja, która to potrafi ?
Próbowałem napisać tak:

  1. <?php
  2.  
  3. $data = 'aaa bbb ccc aaa ddd ccc aaa eee ccc aaa fff ccc';
  4.  
  5.  
  6. '|aaa(?:.*)ccc|',
  7. $data,
  8. $out,
  9. PREG_SET_ORDER
  10.  
  11. );
  12.  
  13. echo $out[0][1];
  14. ?>


Ale to mi wycina całość :/
Nie da się po kolei wyciąć spomiędzy aaa i ccc ?

Chcę, aby zostało:
aaa ccc aaa ccc aaa ccc aaa ccc
siemakuba
Nie jestem pewien czy chcesz wyciągnąc te dane ze stringa czy je usunąć. Z twojego posta nie bardzo to wynika... Tak czy inaczej:

  1. <?php
  2. $data = 'aaa bbb ccc aaa ddd ccc aaa eee ccc aaa fff ccc';
  3. preg_match_all('/aaa(.*?)ccc/i', $data, $m);
  4.  
  5. print_r($m);
  6. ?>

wynik:
Kod
Array
(
    [0] => Array
        (
            [0] => aaa bbb ccc
            [1] => aaa ddd ccc
            [2] => aaa eee ccc
            [3] => aaa fff ccc
        )

    [1] => Array
        (
            [0] =>  bbb
            [1] =>  ddd
            [2] =>  eee
            [3] =>  fff
        )

)

Możesz sobie jeszcze "dostroić" wyrażenie, bo w tej chwili łapie też spacje.

pozdr.
dtb
Kod
#aaa ([a-z]+) ccc#
Immanuel
dzięki za odpowiedzi biggrin.gif
jeszcze jedno pytanko:
Co zrobić, jeżeli zamiast bbb ddd eee fff
będzie cała treść kodu html questionmark.gif
siemakuba
Zdefiniuj pojęcie "cała treść kodu html" :)
Może napisz co dokładnie chcesz skąd wyciągać, to dostaniesz konkretną odpowiedź jak to coś z tamtego czegoś wyciągnąć...

Jeżeli będzie ten twój aaa bbb ccc xxx www zzz hahah string gdzieś w HTML jako tekst, to powinno być OK bez żadnych zmian. Kod który ja podałem pozwala na wyciągnięcie wszystkiego co znajduje się pomiędzy ciągami aaa i ccc.

pozdr.
Immanuel
konkretnie:

chcę usunąć to co się znajduje pomiędzy:
<!DOCTYPE html PUBLIC....
a:
</html>

a znajduje się tam wszystko co tylko możliwe biggrin.gif
około 40KB kodu

tylko w jednym pliku <!DOCTYPE html PUBLIC.... i </html> występują wiele razy :/
jarrod
  1. <?php
  2. $tresc = preg_replace(
  3. '/^(<!DOCTYPE .*?">).*(</html>$)/is',
  4. '1 2',
  5. $tresc
  6. );
  7. ?>
Immanuel
a gdzie jest tekst, z którego będzie brał stringi questionmark.gif
co to znaczy \1 \2 ?

Zrobiłem tak:
  1. <?php
  2.  
  3. $plik = "wynik.txt";
  4. $uchwyt = fopen($plik,"r");
  5.  
  6. $tresc = fread($uchwyt,filesize($plik));
  7.  
  8. $tresc = preg_replace(
  9. '/^(
  10.  .*?">).*(</html>$)/is',
  11. '1 2',
  12. $tresc
  13. );
  14.  
  15. echo $tresc;
  16.  
  17. fclose ($uchwyt);
  18.  
  19. ?>


I nie działa sad.gif

Może źle mnie zrozumieliście :/
Ja chcę wyciąć to co jest w środku i wydrukować tylko:
<!DOCTYPE </html> <!DOCTYPE </html> <!DOCTYPE </html> <!DOCTYPE </html> <!DOCTYPE </html> <!DOCTYPE </html> <!DOCTYPE </html> <!DOCTYPE </html> <!DOCTYPE </html> itd....

tak jak pisałem na początku aaa bbb ccc i chcę żeby zostało tylko aaa ccc smile.gif
jarrod
Cytat(Immanuel @ 25.10.2006, 19:02:25 ) *
chcę usunąć to co się znajduje pomiędzy:
<!DOCTYPE html PUBLIC....
a:
</html>

Po przejściu przez to wyrażenie wszystko poza <!DOCTYPE ... "> a </html> zostaje usunięte.
Cytat
co to znaczy \1 \2 ?

jest to element wyrażeń regularnych.

Wartości w nawiasie (<!DOCTYPE .*?">) są przypisane do zmiennych kolejno numerowanych czyli \1 \2 itd.
Jeżeli chcesz aby w wyniku znalazło się coś co szukasz to używasz właśnie tego.

  1. <?php
  2. ?>
Immanuel
a jak się dostać do tych kolejnych elementów zmiennej $tresc ?
na przykład wypisz mi tylko pierwsze <!DOCTYPE i </html>
jarrod
  1. <?php
  2. $tresc = preg_replace(
  3. '/(<!DOCTYPE.*">)*.*?(</html>)*/i',
  4. ' 1 2',
  5. $t
  6. );
  7. ?>
Immanuel
OK, super, działa
wielkie dzięki smile.gif
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.