Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wiele wyrażeń regularnych najlepsze rozwiązanie
andrzejb
post
Post #1





Grupa: Zarejestrowani
Postów: 93
Pomógł: 1
Dołączył: 12.08.2005

Ostrzeżenie: (10%)
X----


mam taki ciąg z ktorego pogrubione dane, chcialbym wyprowadzic jak najbardziej efektywnie do tablicy

  1. <?php
  2. $txt="Input #0, avi, from 'lolly.avi':
  3. Duration: 00:00:24.9, start: 0.000000, bitrate: 331 kb/s
  4. Stream #0.0: Video: mpeg4400x32025.00 fps
  5. Stream #0.1: Audio: pcm_u88000 Hz, mono64 kb/s
  6. Must supply at least one output file";
  7. ?>


zaczynam od Duration:
  1. <?php
  2. preg_match('/Duration:(.*?:)+/',$txt, $matches);
  3. print_r($matches);
  4.  
  5. $info['mov']['duration']=$matches[0];
  6.  
  7. Array ( [0] => Duration: 00:00:24.9, start: 0.000000, bitrate: [1] => 0.000000, bitrate: ) 
  8.  
  9. ?>


gdzie robie blad ?
Go to the top of the page
+Quote Post
FiDO
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

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


Przede wszystkim blad popelniasz stawiajac plusa za nawiasem. Powoduje to, ze podciag zostaje dopasowany wielokrotnie, ale zwracane jest tylko ostatnie dopasowanie (bitrate).

Jesli chodzi o najmniejsza mozliwa ilosc linijek (co najczesciej przeklada sie na efektywnosc) do wyciagniecia wszystkiego to moj pomysl jest taki:
  1. <?php
  2.  
  3. preg_match_all('#(?:(Duration|start|bitrate): (?P<wartosc>.*?)(?=,|r?n))|(?:(Video|Audio): (?P<av>.*?)(?=r?n))#',$txt, $matches, PREG_SET_ORDER);
  4.  
  5. $info['mov'] = array(
  6. 'duration' => $matches[0]['wartosc'],
  7. 'start' => $matches[1]['wartosc'],
  8. 'bitrate' => $matches[2]['wartosc'],
  9. 'video' => explode(', ', $matches[3]['av']),
  10. 'audio' => explode(', ', $matches[4]['av']),
  11. );
  12.  
  13. print_r($info);
  14.  
  15. ?>

Jak masz pytania dlaczego tak to smialo. Tylko najlepiej wycinaj konkretne kawalki wyrazenia i o nie pytaj.
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: 24.08.2025 - 12:54