Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] preg_match_all
Forum PHP.pl > Forum > Przedszkole
servs
Panowie, mam taki problem,

Jest sobie taki ciąg znaków
  1. <div class="cena">
  2. 1 664,80
  3. </div>
  4. <div class="cena Waluta">USD/uncja</div>

I mielę to php tak, żeby wyciągnąć do zmiennej 1 664,80.

  1. preg_match_all('#<div class="cena">(.*)</div>#', $res, $file);
  2.  
  3. print_r($file);


Niestety z wynikiem
Cytat
Array ( [0] => Array ( ) [1] => Array ( ) )


Czy ktoś ma pomysł na taki problem?
Pozdrawiam.
timon27
Wyszedł ci prawdopodobnie prawidłowy wynik, tylko zapisany w formie tabeli (dwuwymiarowej).
Właściwy wynik chyba w [0][1]
Przeczytaj dokładnie o wyniku tej funkcji w manualu.
servs
Przeszukałem wszystko i wszystko jest puste.
  1. for($a=0;$a<10;$a++){
  2. for($b=0;$b<10;$b++){
  3. if(!empty($file[$a][$b])){
  4. echo $a.', '.$b;
  5. }
  6. }
  7. }
timon27
Faktycznie. z testów wynika, zę podwójny znak " jest jakimś problemem.
Ale nie wiem dlaczego.
Skróć:
<div class="cena">
do:
<div class="cena
a potem utnij dwa znaki i po problemie
servs
Całym problemem jest to, że ma to postać taką:
  1. <div class="cena">
  2. 1 664,80
  3. </div>


Jak doprowadzić to do takiej postaci? Ewentualnie są jakieś wyrażenia regularne, które widzą entery?
  1. <div class="cena">1 664,80</div>
redeemer
Sprawdź tak
  1. preg_match_all('#<div class="cena">(.*)</div>#s', $res, $file);
servs
Działa.
Co zmieniają hashe i "s"?
redeemer
Hashe to tylko znaki początku i końca wyrażenia, skopiowałem je zresztą z Twojego posta.
Co do s: http://php.net/manual/en/reference.pcre.pa...n.modifiers.php
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.