Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Drobny problem z wyrażeniem regularnym
Forum PHP.pl > Forum > PHP
gac3k
Witam, to mój pierwszy post z prośbą o pomoc, banalny bezsensowny i zaraz ktoś mnie zjedzie że takich idiotycznych pytań się nie zadaje ale mam lekkiego kaca i ciężko u mnie z myśleniem więc potrzebuje pomocy wink.gif

Tak więc mam oto, taką metodę w modelu w kohanie, choć to akurat nieistotne.

  1. <?php defined('SYSPATH') or die('No direct script access');
  2.  
  3. class Model_Post extends ORM
  4. {
  5. public $_belongs_to = array(
  6. 'advert' => array(),
  7. );
  8.  
  9. public function replace_songs()
  10. {
  11. $pattern = '[\[piosenka tytul="(.*)" wykonawca="(.*)"\]]is';
  12. $replacer = '<a href="\1">\1</a> - <span>\2</span>';
  13. return preg_replace($pattern,$replacer,$this->content);
  14. }
  15. }
  16.  
  17. ?>


rzecz w tym że metoda ta ma na celu wyciągnięcie jak gdyby z czegoś w stylu BBCODE tytułu i autora piosenki. I generalnie rzecz biorąc skrypt działa poprawnie jeżeli mam tylko jeden taki kod. Czyli np. z fragmentu

Cytat
To może być [piosenka tytul="Jakiś tytuł" wykonawca="Wykonawca"], a przynajmniej tak sądzę.


elegancko wyciągnie wyrażenie i zapisze mi prawidłową wartość, problem pojawia się gdy mam dwa takie kody lub więcej, np.

Cytat
To może być [piosenka tytul="Jakiś tytuł" wykonawca="Wykonawca"], a przynajmniej tak sądzę, ale może to też [piosenka tytul="Inny tytuł" wykonawca="Inny Wykonawca"].


to parsuje się tylko część pierwszego kodu, a cała reszta się psuje.

Wiecie może jak powinno wyglądać prawidłowe wyrażenie, lub może błąd jest w innym miejscu, będę wdzięczny za każdą odpowiedź biggrin.gif
BaN
* jest operatorem zachłannym, zatem musi być
  1. $pattern = '[\[piosenka tytul="([^"]*)" wykonawca="([^"]*)"\]]is';

albo
  1. $pattern = '[\[piosenka tytul="(.*?)" wykonawca="(.*?)"\]]is';
gac3k
Wielkie dzięki, działa jak trzeba. Wiedziałem że to jakaś pierdółka wink.gif
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.