Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wyrazenie regularne
Forum PHP.pl > Forum > PHP
changer
Witam

mam pytanie

z dłuuugiego ciągu tekstowego: zmienna $txt


chce znalezc pierwszy ciąg który wystąpi w takim formaci w tekscie:

"from $cyfrancyfracyfracyfracyfra" czyli np. "from $2345"

znajduje ciąg from $tylkocyfryod2domax5cyfr ze zmiennej txt



co robie nie tak?

preg_match_all("/^from $[0-9]{2,5}$/", "$txt", $out, PREG_PATTERN_ORDER);




czy ten dolar za from przeszkadza? niestey w tym ciagu wystepuje on jako znak waluty.

prosze o pomoc
TheSnake
przed dolarem \
changer
dzięki
ale dalej cos jest nie tak sad.gif




echo $out;

daje wynik "Array"
Quantum
bo rezultatem jest tablica, daj print_r($out) zamiast echo.
changer
dalej nic z tego
wynik:


Array ( [0] => Array ( ) )




---------------

preg_match_all("/^from \$[0-9]{2,5}$/", $txt, $out, PREG_PATTERN_ORDER);
print_r($out);


zebysmy sie dobrze zrozumieli
potrzebuje po prostu wyciagnac cene do jakiejs zmiennej int (liczba min dwucyfrowa)

w ciagu $txt szuka ciągu "from \$jakasliczba" np. ...from $2345...
i wyciaga 2345 do jakiejs zmiennej
jesli jakasliczka jest jedno cyfrowa szuka dalej takiego samego ciagu
gdzie bedzie liczba dwucyfrowa


[0-9]{2,5}
Quantum
Cytat
  1. preg_match_all("/^from \$[0-9]{2,5}$/", "$txt", $out, PREG_PATTERN_ORDER);
  2. print_r($out);


źle podstawiona zmienna w 2 argumencie, usuń cudzysłowy
changer
dalej ten sam bład sad.gif

jak mozesz zerknij na moj post o 1 wyzej
poprawilem bo sam sie zamotalem smile.gif
Quantum
  1.  
  2. $txt = '... ... from $23 . . .. ... from $112 .. .. from $1';
  3.  
  4. preg_match_all('/from \$([0-9]{2,5})/', $txt, $out, PREG_PATTERN_ORDER);
  5.  
  6. print_r($out[0]); // Array ( [0] => from $23 [1] => from $112 )
  7. print_r($out[1]); // Array ( [0] => 23 [1] => 112 )
  8.  


Jeżeli chcesz dostać tylko tablicę zawierającą dane razem z "from $" - usuń nawiasy z wzorca.
changer
DZIĘKI WIELKIE, DZIAŁA smile.gifsmile.gif

mam wynik:

Array ( [0] => Array ( [0] => from $730 [1] => from $730 [2] => from $4797 [3] => from $645 [4] => from $645 [5] => from $682 [6] => from $695 [7] => from $731 [8] => from $755 [9] => from $791 [10]....


jak mozesz podpowiedz mi jeszcze

jak teraz zapisac

3 ceny
czyli

from $12 [1]
from $1234 [4]
from $1234 [5]


do zmiennych INT odpowiednio bez from $

$cena1
$cena2
$cena3
TNT
  1. $cena1 = (int) substr(arr[1], 6);
changer
Parse error: syntax error, unexpected '[' in /home/.....
TNT
Dałem arr[1] bo nie wiedziałem jaka zmienna trzyma arraya.
  1. $cena1 = (int) substr($out[1], 6);
Quantum
po co tworzyć nowe zmienne ? nie lepiej zachować je w jednej tablicy ? ($out[1]).

konwersja na typ INT:

  1.  
  2. $txt = '... ... from $23 . . .. ... from $112 .. .. from $1 .... from $16';
  3.  
  4. preg_match_all('/from \$([0-9]{2,5})/', $txt, $out);
  5.  
  6. foreach ($out[1] as &$cena)
  7. {
  8. $cena = (int) $cena;
  9. }
  10.  
changer
ahhh, "zmeczenie materialu" chyba juz mam biggrin.gif
----------------------------------------------------------------------


preg_match_all('/from \$([0-9]{2,5})/', $strona2, $out, PREG_PATTERN_ORDER);

print_r($out[1]);

// wynik Array ( [0] => 730 [1] => 730 [2] => 4797 [3] => 645 [4] => 645 [5] => 682 [6] => 695 [7] => 731 [8] => 755 [9] => 791 [10] => 838 [11] => 839 [12] => 909 [13] => 1110 [14] => 2596 [15] => 4629 [16] => 4868 )

$cena1 = (int) substr($out[1], 6);
$cena2 = (int) substr($out[2], 6);
$cena3 = (int) substr($out[3], 6);
$cena4 = (int) substr($out[4], 6);
$cena5 = (int) substr($out[5], 6);

echo "$cena1";
echo "$cena2";
echo "$cena3";
echo "$cena4";
echo "$cena5";

//wynik 00000

czemu?
Quantum
Cytat
// wynik Array ( [0] => 730 [1] => 730 [2] => 4797 [3] => 645 [4] => 645 [5] => 682 [6] => 695 [7] => 731 [8] => 755 [9] => 791 [10] => 838 [11] => 839 [12] => 909 [13] => 1110 [14] => 2596 [15] => 4629 [16] => 4868 )

$cena1 = (int) substr($out[1], 6);


dostajesz 0 i prawidłowo smile.gif TNT dał rozwiązanie, w tym przypadku najgorsze z możliwych, nie musisz zamieniać tekstu "from $" gdy masz już czystą liczbę.

Cytat
$cena1 = (int) substr($out[1], 6);
$cena2 = (int) substr($out[2], 6);
$cena3 = (int) substr($out[3], 6);


Tablica $out ma tylko 2 elementy, odwołuj się $out[1][klucz] i przeczytaj mojego poprzedniego posta.
TNT
Cytat(sniffer32 @ 28.02.2010, 15:08:12 ) *
TNT dał rozwiązanie, w tym przypadku najgorsze z możliwych, nie musisz zamieniać tekstu "from $" gdy masz już czystą liczbę.

Hehe dzięki za komplement winksmiley.jpg Dopiero raczkuję w php rolleyes.gif
changer
mam teraz


preg_match_all('/from \$([0-9]{2,5})/', $strona2, $out, PREG_PATTERN_ORDER);

print_r($out[1]);

foreach ($out[1] as &$cena)
{
$cena = (int) $cena;
}


//blad
Parse error: syntax error, unexpected '&', expecting T_VARIABLE or '$' in /home.....

czy mogbys mi dokladniej podpowiedziec

jak nie stosujac nowych zmiennych
wyswietlic np echem "piątą cenę"
Quantum
@TNT

nie no, nie ma sprawy biggrin.gif

@changer

jeżeli tak bardzo upierasz się przy możliwości odwoływania się w stylu $cena1, $cena2.. to proponuje bardziej elastyczny sposób, niż wpisywanie ręcznie wszystkich zmiennych.

  1. foreach ($out[1] as $key => $val)
  2. {
  3. ${'cena'.($key+1)} = (int) $val;
  4. }


ile cen by nie znalazło, przypisze je automatycznie poczynając od $cena1 i skonwertuje na liczbę całkowitą.
changer
znaczy sie jesli mozna sie obejsc bez zmiennych typu $cena1 $cena2 to ok smile.gif

tylko w jaki sposob je wyswietlic np echem np piątą wartost z array stosujac $out[1]klucz ? tzn jak dokladnie
Quantum
  1. echo $out[1][5];


kompletne podstawy podstaw, przeczytaj jakiś szybki kurs php, żeby przynajmniej składnie języka poznać. winksmiley.jpg bez tego wszystko będzie jak "czarna magia".
changer
mam jeszcze jeden problem

mam taki ciąg html w zmiennej $txt



....

<tr><td id="FlightTxt">




<font color="black">











<b>Roundtrip: </b>






<font size="3" class="SHL"><a class="CursorHand" onclick="java script:FD(0,'P','-20573',0,23,'2')" id="A5080_16"><b>$677.80</b></a></font>
&nbsp;






</font>


</td></tr>
....




potrzebuje wyciągnać z tego w tym przypadku 677.80



zapis:

preg_match_all('/<td id="FlightTxt">.*\$([0-9]{2,6})/', $txt, $out, PREG_PATTERN_ORDER);

nie dziala sad.gif
Proszę o pomoc
Quantum
spróbuj tak '/<font size="3" class="SHL"><a class="CursorHand".*><b>\$([0-9.]+)<\/b><\/a><\/font>/'
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.