Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wyrażenia regularne
Forum PHP.pl > Forum > PHP
brobo
Witam, z wyrażeń regularnych niestety jestem cienki jak.... stąd mój problem.

Krótkim kawałkiem kodu chciałbym usuwać nadmiar informacji z kanału rss tzn. chcę usunąć tagi <content:encoded>.*</content:encoded>.

  1. $output = preg_replace('/(\<content\:encoded\>.*\<\/content\:encoded\>)/s', '', $output);


Niestety efekt jest taki, że usuwa wszystko co znajduje się między pierwszym wystąpieniem <content:encoded>, a ostatnim wystąpieniem </content:encoded> (w całym kodzie kanały), zamiast usuwać pojedyncze elementy. Dobrze byłoby wykluczyć występowanie w ciągu .* chociażby </content:encoded> lub innego tagu xml w rss np. <title>. Tylko jak?

Z góry dzięki.
Adi32
  1. $output = preg_replace('/(\<content\:encoded\>.*\<\/content\:encoded\>)/s', '', $output);


To jest zachłanne.

Potrzebujesz leniwego:

  1. $output = preg_replace('/(\<content\:encoded\>.*?\<\/content\:encoded\>)/s', '', $output);
hind
To powinno lepiej zadziałać:
  1. $output = preg_replace('/(\<content\:encoded\>(.*)\<\/content\:encoded\>)/s', '$1', $output);
brobo
Cytat(Adi32 @ 6.04.2012, 08:11:43 ) *
Potrzebujesz leniwego:

  1. $output = preg_replace('/(\<content\:encoded\>.*?\<\/content\:encoded\>)/s', '', $output);


Ehh, aż wstyd, że takie proste było. O to chodziło smile.gif.

@hind niestety Twoja propozycja pozostawia kanał bez zmian (zamienia znaleziony ciąg znalezionym ciągiem?).

Dzięki, pozdrawiam!
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.