Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wydobycie danych z tekstu
Forum PHP.pl > Forum > Przedszkole
AdBlock
Witam.
Jak wydobyć z tekstu wpisywanego przez użytkownika na stronie dane wyglądające jak: 000|000
Liczby byłyby zmienne po obu stronach z zakresu 100 do 999, jednak nie można przewidzieć jakie byłyby to konkretnie liczby.
Dane te byłyby częścią dłuższego tekstu.

Na przykład tekst wyglądałby tak:
Bla Bla Bla (346|743) bla bla bla

I chodzi o wydobycie samego 346|743
Nie wiem z której strony to ugryźćsmile.gif

Z góry dziękuję za pomoc:)
!*!
wyrażenia regularne preg_match
szmerak
wyrażenia regularne poczytaj http://php.net/manual/en/function.preg-match-all.php

dla przykładu takie coś:
  1. $text = "bla bla bla 910|293 nasda mlamdsa";
  2. preg_match_all("/([0-9|]+){7}/", $text, $new);
  3. var_dump($new);


niesprawdzałem ale powinno działać
AdBlock
Cytat
Data 10.06.12 15:26:21
Siała baba mak
Dziad

Jeżeli mam coś takiego w textarea, to jak zrobić preg_match_all od Data do Dziad? Bo jeżeli chcę do Siała (wydobyć datę), to działa ten kod:
  1. preg_match_all ("|Data(.*)\sSiała|U", $nazwa, $data, PREG_PATTERN_ORDER);

a to nie działa (jeżeli chcę wydobyć "Siała baba mak"):
  1. preg_match_all ("|Data(.*)\sDziad|U", $nazwa, $data, PREG_PATTERN_ORDER);


Lub jak inaczej wydobyć "Siała baba mak"? (data jest zmienna, więc nie można na niej wykonać preg_match_all)
!*!
Kod
'/Data([\s\.\:0-9]+)([a-zA-Z\s]+)Dziad/'


Wtedy odbierasz:

Kod
Array
(
[0] => Array
(
   [0] => Data 10.06.12 15:26:21 Siala baba mak Dziad
)

[1] => Array
(
   [0] =>  10.06.12 15:26:21
)

[2] => Array
(
   [0] => Siala baba mak
)

)
AdBlock
Coś muszę chyba źle robić...
  1. preg_match_all ('/Data([\s\.\:0-9]+)([a-zA-Z\s]+)Dziad/', $nazwa, $data2, PREG_PATTERN_ORDER);

ani
  1. preg_match_all ('|Data([\s\.\:0-9]+)([a-zA-Z\s]+)Dziad|U', $nazwa, $data2, PREG_PATTERN_ORDER);

nie działają...
!*!
Fakt, zapisałem to ciurkiem i działało... musisz dodać do tego wyrażenia opcje z enterem czy jakoś tak:

Kod
"/Data([\.\:0-9\s\r\n]+)([a-zA-Z\s\r\n]+)Dziad/U"
AdBlock
Wciąż niestety nie działa...
  1. preg_match_all ('|Data([\.\:0-9\s\r\n]+)([a-zA-Z\s\r\n]+)Dziad|U', $nazwa, $data2, PREG_PATTERN_ORDER);

Wydaje mi się wszystko ok, ale print_r zwraca pustą tablicę.
!*!
Pokaż kod, bo u mnie jest tablica z datą i "Siala baba mak "
AdBlock
  1. $nazwa = "Data 10.06.12 15:26:21
  2. Siała baba mak
  3. Dziad";
  4. preg_match_all ('|Data([\.\:0-9\s\r\n]+)([a-zA-Z\s\r\n]+)Dziad|U', $nazwa, $data2, PREG_PATTERN_ORDER);
  5. print_r($data2);
!*!
jak używasz \r\n\s to musi być wyrażenie w cudzysłowu a nie apostrofach.

  1. $text = 'Data 10.06.12 15:26:21
  2. Siala baba mak
  3. Dziad';
  4. echo $text.'<br/>';
  5. $text = preg_match_all ("/Data([\.\:0-9\s\r\n]+)([a-zA-Z\s\r\n]+)Dziad/U", $text, $data, PREG_PATTERN_ORDER);
  6.  
  7. echo '<pre>';
  8. print_r($data);
AdBlock
  1. preg_match_all ("|Data([\.\:0-9\s\r\n]+)([a-zA-Z\s\r\n]+)Dziad|U", $nazwa, $data2, PREG_PATTERN_ORDER);

tak?
niestety niczego to nie zmienia
!*!
Sprawdź kod wyżej, jest ok.
AdBlock
  1. $text = 'Wysłane 10.06.12 15:47:41
  2. Jeden dwa trzy
  3. Cztery';
  4. $text = preg_match_all ("/Wysłane([\.\:0-9\s\r\n]+)([a-zA-Z\s\r\n]+)Cztery/U", $text, $data, PREG_PATTERN_ORDER);
  5. print_r($data);


Mógłbyś mi powiedzieć dlaczego to nie działa? Prawie identycznie jak poprzednie, różni się kilkoma wyrazami, a nie działa...
!*!
Działa.

Kod
Array
(
    [0] => Array
        (
            [0] => Wysłane    10.06.12 15:47:41

Jeden dwa trzy

Cztery
        )

    [1] => Array
        (
            [0] =>     10.06.12 15:47:41
        )

    [2] => Array
        (
            [0] =>

Jeden dwa trzy


        )

)
AdBlock
Dziwne... jak wrzuciłem to do zupełnie nowej strony też działało.
Teraz też wrzucam to do nowej strony:
  1. <?php
  2. $nazwa = $_POST['nazwa'];
  3. echo $nazwa.'<br /><br /><br />';
  4. preg_match_all ("/Wysłane([\.\:0-9\s\r\n]+)([a-zA-Z\s\r\n]+)Szczęście/U", $nazwa, $data, PREG_PATTERN_ORDER);
  5. print_r($data);
  6. ?>
  7. <form action="preg.php" method="post">
  8. <textarea name="nazwa" cols="50" rows="10"></textarea><br />
  9. <input type="submit" name="submit" value="Konwertuj">
  10. </form>
  11. <?php
  12. ?>


I nie działa...
Działa u Ciebie?
!*!
Tak, Sprawdź czy aby na pewno wysyłasz to co chcesz odebrać.
AdBlock
Wysyłam
Cytat
Wysłane 10.06.12 15:47:41
Jeden dwa trzy
Szczęście


Wyświetla mi się:
  1. Wysłane 10.06.12 15:47:41 Jeden dwa trzy Szczęście
  2.  
  3.  
  4. Array ( [0] => Array ( ) [1] => Array ( ) [2] => Array ( ) )
!*!
  1. (
  2. [0] => Array
  3. (
  4. [0] => Wysłane 10.06.12 15:47:41
  5. Jeden dwa trzy
  6. Szczęście
  7. )
  8.  
  9. [1] => Array
  10. (
  11. [0] => 10.06.12 15:47:41
  12. )
  13.  
  14. [2] => Array
  15. (
  16. [0] =>
  17. Jeden dwa trzy
  18.  
  19. )
  20.  
  21. )


Cytat
Wysłane 10.06.12 15:47:41
Jeden dwa trzy
Szczęście


  1. $text = $_POST['nazwa'];
  2. echo $text.'<br /><br /><br />';
  3.  
  4. preg_match_all ("/Wysłane([\.\:0-9\s\r\n]+)([a-zA-Z\s\r\n]+)Szczęście/U", $text, $data, PREG_PATTERN_ORDER);
  5.  
  6. echo '<pre>';
  7. print_r($data);


Działa jak w mordę strzelił. Może coś nadpisujesz, sprawdź to w czystym, innym pliku na serwerze.
AdBlock
http://adblock.unixstorm.org/test/tescik.php

nie działa
nie mam już pomysłu co zrobić, aby działało
!*!
A skopiowałeś mój kod?
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.