Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyrażenia regularne i wyciągnięcie danych ze stringu
Forum PHP.pl > Forum > PHP
mickula
Witam,

mam oto taki tekścik:

Feb 19 2008, 16:49:22 CET went out 80 times with Isabell
and with Ressco

muszę z tego wyciągnąć rzeczy pogrubione: datę, ilość razy, i dwa imiona.
Ktos pomoże? Nigdy nie byłem mocny w wyrażeniach regularnych.
Z góry dziękuje.
Cezar708
  1. <?php
  2. $str = "Feb 19 2008, 16:49:22 CET went out 80 times with Isabell and with Ressco";
  3.  
  4. $a1 = explode('went out', $str);
  5. $a2 = explode('times with', $a1[1]);
  6. $a3 = explode('and with', $a2[1]);
  7.  
  8. // wynik 
  9. echo $a1[0]."\n".$a2[0]."\n".$a3[0]."\n".$a3[1];
  10. ?>


zadziałą i w wyniku da:
Kod
Feb 19 2008, 16:49:22 CET
80
Isabell
Ressco


.. a tak naprawdę to podaj więcej szczegółów, czyli na przykład co będzie się zmieniało a co pozostanie niezmienne, będzie łątwiej Ci pomóc
mickula
Zmieniały będą się pogrubione rzeczy.

String także w niektórych przypadkach może się kończyć po pierwszym imieniu i może wyglądać tak:

'Feb 19 2008, 16:49:22 CET went out 80 times with Isabell'


Dzięki.

Chodzi mi też o wyrażenie, które by wyciągało taki tekst z dużego pliku.
Cezar708
to w takim razie jeśli tylko tyle... czyli string będzie bardzo stałego formatu to nie musisz używać wyrażeń regularnych tylko zwykłego explode w sposób jaki Ci przedstawiłem w pierwszym poście.

ewentualnie możesz zrobić małą korektę w ostatniej linii, żeby Ci warningów nie wywalało i żebyś miał lepsze dojście do zmeinnych:

  1. <?php
  2. // wynik 
  3. $data = $a1[0];
  4. $wentOut = $a2[0];
  5. $firstName = $a3[0];
  6. $secondName = isset($a3[1]) ? $a3[1] : false;
  7. ?>


na pewno takie rozbijanie jest szybsze od wyrażeń regularnych
bim2
  1. <?php
  2. $string2 = 'Feb 19 2008, 16:49:22 CET went out 80 times with Isabell
  3. and with Ressco';
  4. $string_ = preg_replace('!(.*) went out ([0-9]+) times (.*)!is', '$1::$2::$3', $string2);
  5. $string_ = explode('::', $string_);
  6. preg_match_all('!with ([A-Za-z]+)!', $string_[2], $pregs);
  7. $pregs = $pregs[1];
  8. print_r($string_);
  9. print_r($pregs);
  10. ?>

daje:
Cytat
Array ( [0] => Feb 19 2008, 16:49:22 CET [1] => 80 [2] => with Isabell and with Ressco ) Array ( [0] => Isabell [1] => Ressco )
em1X
skoro coś jest pogróbione to znaczy, że jest między na przykład znacznikami <b> </b>

  1. <?php
  2. preg_match_all('/<b>(.*?)</b>/i', $tekst, $matches);
  3.  
  4. print "<pre>";
  5. print_r($matches);
  6. ?>
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.