Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wyrażenia regularne i wyciągnięcie danych ze stringu
mickula
post 22.02.2008, 11:01:59
Post #1





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 28.10.2006

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


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.
Go to the top of the page
+Quote Post
Cezar708
post 22.02.2008, 11:57:07
Post #2





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

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


  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
Go to the top of the page
+Quote Post
mickula
post 22.02.2008, 11:58:56
Post #3





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 28.10.2006

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


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.

Ten post edytował mickula 22.02.2008, 12:00:32
Go to the top of the page
+Quote Post
Cezar708
post 22.02.2008, 12:03:31
Post #4





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

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


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
Go to the top of the page
+Quote Post
bim2
post 22.02.2008, 12:14:11
Post #5





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

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


  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 )


--------------------
Go to the top of the page
+Quote Post
em1X
post 22.02.2008, 19:49:37
Post #6





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

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


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. ?>


--------------------
eh, co polska wódka to polska wódka
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 12.06.2025 - 14:59