Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: preg_match - jak wyszukać najkrótszy pasujący ciąg
Forum PHP.pl > Forum > PHP
Tibod
Fragment skryptu:

  1. <?php
  2. $tresc='<p>bla bla<p> bla bla bla<p class=temat">Temat strony</p>dalsze bla bla bla</p> cos tam bla bla</p>';
  3. $wyrazenie='#<p class=pagetitle>(.*)</p>#';
  4. preg_match($wyrazenie, $tresc, $nazwa);
  5.  
  6. echo $nazwa[1];
  7. ?>


w odpowiedzi dostaje:
Kod
Temat strony

dalsze bla bla bla

cos tam bla bla


a wolałbym jednak samo
Kod
Temat strony



Ma ktoś pomysł jak to ugryźć. Jak nakazać funkcji wyszukiwać najkrótszy możliwy ciąg.
JaRoPHP
Wyrażenia regularne są "zachłanne" - jak zauważyłeś.
Osobiście zrezygnowałbym ze znaku ".", jako dopasuj cokolwiek, a zrobił ograniczenie, tak, aby już nie brał znaku "<".

  1. <?php
  2. $wyrazenie='#<p class=pagetitle>([a-zęóąśłżźćń ]+)#i';
  3. ?>
zimi
  1. <?
  2. $wyrazenie='#<p class=pagetitle>(.*?)</p>#';
  3. ?>

i na moje oko będzie ok

EDIT trochę nabałaganiłeś w swoim poście więc podam to w teorii, po znaku + bądź * dodajesz ? i regularki przestają być zachłanne...
Tibod
Dzięki. Działa super.
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.