Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [regexp] trochę skomplikowane wyrażenie (dla mnie)
Najki
post
Post #1





Grupa: Zarejestrowani
Postów: 190
Pomógł: 0
Dołączył: 12.02.2004
Skąd: Poznań

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


Chciałem do swojego systemu news'ów dorobić pewną opcję, która przetworzy mi pewne dane w taki sposób, abym mógł z nich wygenerować ładną tabelkę z informacjami. W takim razie najlepiej jakby to wyrażenie wyjęło mi żądane przeze mnie elementy trafiły do jakiejś tablicy albo coś w tym stylu.

Niebardzo znam się na wyrażeniach regularnych, więc szczerze się przyznam, że proszę uprzejmie o to, aby ktoś mi napisał odpowiednie wyrażenie.

Użytkownik wprowadza coś takiego:
Kod
[mecz]"nazwa drużyny 1";"nazwa drużyny 2";10:0;"http://adres.obrazka/druzyna1.jpg";"http://adres.obrazka/druzyna2.jpg";"2006-01-13";"17:04";"dodatkowe informacje z możliwymi pogrubieniami itp. w stylu BBcode czyli np. [b]a[/b]"[/mecz]


Opisując dane:
Kod
[mecz]"drużyna1";"drużyna2";wynik1:wynik2;"adres obrazka druzyny1";"adres obrazka druzyny2";"data";"godzina";"informacje dodatkowe"[/mecz]


Proszę uprzejmie smile.gif.


--------------------
Go to the top of the page
+Quote Post
crash
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

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


Może tak będzie łatwiej:
  1. <?php
  2. $games = array();
  3. if( preg_match_all( '#[mecz](.+?)[/mecz]#is', $x, $out ) )
  4. {
  5.    function removeQuotes( &$value, $key )
  6.    {
  7.       if( $key != 2 )
  8.       {
  9.          $value = substr( $value, 1, -);
  10.       }
  11.    }
  12.  
  13.    foreach( $out[ 1 ] as $game )
  14.    {
  15.       $dat = explode( ';', $game );
  16.       array_walk( $dat, 'removeQuotes' );
  17.       $score = explode( ':', $dat[ 2 ] );
  18.       $games[] = array( 
  19.                         'team1'  => $dat[ 0 ],
  20.                         'team2'  => $dat[ 1 ],
  21.                         'score1' => $score[ 0 ],
  22.                         'score2' => $score[ 1 ],
  23.                         'image1' => $dat[ 3 ],
  24.                         'image2' => $dat[ 4 ],
  25.                         'date'   => $dat[ 5 ],
  26.                         'time'   => $dat[ 6 ],
  27.                         'info'   => $dat[ 7 ]
  28.                       );
  29.    }
  30. }
  31.  
  32. print_r( $games );
  33. ?>

Oczywiście nie będzie to odporne na "lame users" znaczy podanie znaku " czy ; w treści popsuje wszystko, ale nie mam na tą chwilę lepszego pomysłu.


--------------------
Go to the top of the page
+Quote Post
Najki
post
Post #3





Grupa: Zarejestrowani
Postów: 190
Pomógł: 0
Dołączył: 12.02.2004
Skąd: Poznań

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


Działa, duże podziękowania smile.gif.


--------------------
Go to the top of the page
+Quote Post
bela
post
Post #4


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

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


  1. <?php
  2. preg_match_all('/[mecz](".*";)*[/mecz]/');
  3. ?>


Ja zrobiłbym to w taki sposób. Znając kolejność łatwo w tablicy znajdziesz swoje dane.


--------------------
Go to the top of the page
+Quote Post
crash
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

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


No to do końca tak nie zadziała jak powinno, nie każda cześć jest ujęta w cudzysłowia, nie każda jest oddzielona średnikiem.


--------------------
Go to the top of the page
+Quote Post
Najki
post
Post #6





Grupa: Zarejestrowani
Postów: 190
Pomógł: 0
Dołączył: 12.02.2004
Skąd: Poznań

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


No, wszystkie oprócz wyniku są w cudzysłowiach. W zasadzie wynik można potraktować jako całość i nie rozbijać go explode'm przez dwukropek, bo to można później zrobić. W każdym razie wynik nie jest w cuszysłowiu, reszta tak.


--------------------
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 Aktualny czas: 20.08.2025 - 08:36