Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]preg_match, wyciagniecie tekstu znajdujacego sie pomiedzy dwoma slowami, absolutnie wszystkiego
fiszol
post
Post #1





Grupa: Zarejestrowani
Postów: 452
Pomógł: 16
Dołączył: 25.05.2004
Skąd: Gorzów Wlkp.

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


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.
Go to the top of the page
+Quote Post
sada
post
Post #2





Grupa: Zarejestrowani
Postów: 302
Pomógł: 24
Dołączył: 6.12.2008

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


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);
?>

Ten post edytował sada 10.01.2011, 22:59:43
Go to the top of the page
+Quote Post
fiszol
post
Post #3





Grupa: Zarejestrowani
Postów: 452
Pomógł: 16
Dołączył: 25.05.2004
Skąd: Gorzów Wlkp.

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


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.
Powód edycji: [Daiquiri]: Temat przeniesiony z przedszkola
Go to the top of the page
+Quote Post
Noidea
post
Post #4





Grupa: Zarejestrowani
Postów: 226
Pomógł: 61
Dołączył: 20.08.2010

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


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 03:53