Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]preg_match, wyciagniecie tekstu znajdujacego sie pomiedzy dwoma slowami
Forum PHP.pl > Forum > PHP
fiszol
Witam
  1. $pattern = "/^Typ(.*)Il/m";
  2.  
  3. $string = "Jakis tam sobie teskt Typ Costam1 Costam2
  4. Il 14 22
  5. bla bla bla";
  6. preg_match($pattern,$string,$match);

Zwraca pustą tablicę, jakiego patternu użyć żeby otrzymać dane wyglądające mniej więcej tak:
Kod
Array
        0 => Array
            0 => Costam1
            1 => Costam2
        1 => Array
            0 => 14
            1 => 22
lub nawet:
Kod
Array
    Costam1 => 14
    Costam2 => 22

Problem prawdopodbnie leży w spacjach/tabach i znakach nowej linii, próbowałem użyć \s ale nie bardzo rozumiem jak to wszystko działa i nic mi nie wyszło. Z góry dzięki za pomoc.
sada
Jakoś tak

<?php

$pattern = '/Typ\s+(.+)\s+(.+)(\n|\s)+Il\s+(\d+)\s+(\d+)/';

$string = '
Jakis tam sobie teskt Typ Costam1 Costam2

Il 14 22

bla bla bla';

preg_match($pattern,$string,$match);
print_r($match);
?>
fiszol
Odgrzebałem temat. Na wstępie: dzięki sada, Twoje wyrażenia okazały się pomocne, stoję jednak przed kolejnym problem, mianowicie

  1. <?php
  2. $string = "Jakis tam sobie teskt Typ Costam1 Costam2
  3. Il 14 22
  4. bla bla bla";
  5.  
  6. $pattern = '/Typ\s+(.+)\s+(.+)(\n|\s)/';
  7. // powyższy pattern sprawdza się do momentu, gdy string nie wygląda tak:
  8. $kolejny_string = "Jakis tam sobie teskt
  9. Typ Costam1 Costam2
  10. Il 14 22
  11. bla bla bla";
  12. // lub tak:
  13. $yet_another_kolejny_string = "Jakis tam sobie teskt
  14. Typ Costam1 Costam2 //spacje zamiast tabów
  15. Il 14 22
  16. bla bla bla";


Potrzebuję wyrażania, które złapie wszystkie "coś tamy" między Typ a Il bez względu na ilość spacji i tabów które mogą się znaleźć pomiędzy nimi i wsadzi je w ładny array(Costam1,Costam2,itd);

Z góry dziękuje za czas poświęcony na pomoc i cierpliwość.

Wymyśliłem że mogę zamieniać ewentualne taby na spację, później zrobić explode na 'Typ' i 'Il', później explodować spację i też będę miał w arrayu to co chcę, ale to tylko obejście i ucieczka od regexów. Która metoda wyciągnięcia tych danych będzie wydajniejsza? Całość będzie powtarzana w pętli, maksymalnie 15 razy.
Noidea
Cytat
Potrzebuję wyrażania, które złapie wszystkie "coś tamy" między Typ a Il bez względu na ilość spacji i tabów które mogą się znaleźć pomiędzy nimi

Możesz zrobić to dwoma wyrażeniami. Pierwszym wyciągasz wszystko od słowa Typ do końca linijki (flaga m - multiline). Potem rozdzielasz wyrazy oddzielone przynajmniej jednym białym znakiem:
  1. <?php
  2.  
  3. $string = "Jakis tam sobie teskt Typ Costam1 Costam2
  4. Il 14 22
  5. bla bla bla";
  6.  
  7. $kolejny_string = "Jakis tam sobie teskt
  8. Typ Costam1 Costam2 Cos3
  9. Il 14 22
  10. bla bla bla";
  11.  
  12. $yet_another_kolejny_string = "Jakis tam sobie teskt
  13. Typ Costam1 Costam2 Cos3 Cos4 Cos5
  14. Il 14 22
  15. bla bla bla";
  16.  
  17.  
  18. $matchPattern = "~Typ(.*)$~m";
  19. $splitPattern = "~\s+~";
  20.  
  21. preg_match( $matchPattern, $string, $match );
  22. $result = preg_split( $splitPattern, $match[1], null, PREG_SPLIT_NO_EMPTY );
  23. print_r( $result );
  24.  
  25. ?>



Cytat
Wymyśliłem że mogę zamieniać ewentualne taby na spację, później zrobić explode na 'Typ' i 'Il', później explodować spację i też będę miał w arrayu to co chcę, ale to tylko obejście i ucieczka od regexów. Która metoda wyciągnięcia tych danych będzie wydajniejsza?


Różnica będzie tak mała, że nie ma to znaczenia.
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.