Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> wyrazenie regularne, wyciagniecie ciagu z ciagu w odpowiednim formacie z $
changer
post 28.02.2010, 12:02:18
Post #1





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 26.06.2009

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
TheSnake
post 28.02.2010, 12:06:42
Post #2





Grupa: Zarejestrowani
Postów: 115
Pomógł: 10
Dołączył: 5.06.2009

Ostrzeżenie: (0%)
-----


przed dolarem \
Go to the top of the page
+Quote Post
changer
post 28.02.2010, 12:22:55
Post #3





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 26.06.2009

Ostrzeżenie: (0%)
-----


dzięki
ale dalej cos jest nie tak sad.gif




echo $out;

daje wynik "Array"
Go to the top of the page
+Quote Post
Quantum
post 28.02.2010, 12:27:42
Post #4





Grupa: Zarejestrowani
Postów: 450
Pomógł: 84
Dołączył: 27.11.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


bo rezultatem jest tablica, daj print_r($out) zamiast echo.
Go to the top of the page
+Quote Post
changer
post 28.02.2010, 12:39:23
Post #5





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 26.06.2009

Ostrzeżenie: (0%)
-----


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}

Ten post edytował changer 28.02.2010, 13:01:45
Go to the top of the page
+Quote Post
Quantum
post 28.02.2010, 12:47:31
Post #6





Grupa: Zarejestrowani
Postów: 450
Pomógł: 84
Dołączył: 27.11.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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

Ten post edytował sniffer32 28.02.2010, 12:48:05
Go to the top of the page
+Quote Post
changer
post 28.02.2010, 12:54:48
Post #7





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 26.06.2009

Ostrzeżenie: (0%)
-----


dalej ten sam bład sad.gif

jak mozesz zerknij na moj post o 1 wyzej
poprawilem bo sam sie zamotalem smile.gif
Go to the top of the page
+Quote Post
Quantum
post 28.02.2010, 14:16:18
Post #8





Grupa: Zarejestrowani
Postów: 450
Pomógł: 84
Dołączył: 27.11.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


  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.

Ten post edytował sniffer32 28.02.2010, 14:21:16
Go to the top of the page
+Quote Post
changer
post 28.02.2010, 14:36:42
Post #9





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 26.06.2009

Ostrzeżenie: (0%)
-----


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

Ten post edytował changer 28.02.2010, 14:39:21
Go to the top of the page
+Quote Post
TNT
post 28.02.2010, 14:41:49
Post #10





Grupa: Zarejestrowani
Postów: 41
Pomógł: 2
Dołączył: 14.04.2007

Ostrzeżenie: (0%)
-----


  1. $cena1 = (int) substr(arr[1], 6);
Go to the top of the page
+Quote Post
changer
post 28.02.2010, 14:48:09
Post #11





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 26.06.2009

Ostrzeżenie: (0%)
-----


Parse error: syntax error, unexpected '[' in /home/.....
Go to the top of the page
+Quote Post
TNT
post 28.02.2010, 14:51:03
Post #12





Grupa: Zarejestrowani
Postów: 41
Pomógł: 2
Dołączył: 14.04.2007

Ostrzeżenie: (0%)
-----


Dałem arr[1] bo nie wiedziałem jaka zmienna trzyma arraya.
  1. $cena1 = (int) substr($out[1], 6);
Go to the top of the page
+Quote Post
Quantum
post 28.02.2010, 14:55:35
Post #13





Grupa: Zarejestrowani
Postów: 450
Pomógł: 84
Dołączył: 27.11.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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.  
Go to the top of the page
+Quote Post
changer
post 28.02.2010, 15:02:53
Post #14





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 26.06.2009

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
Quantum
post 28.02.2010, 15:08:12
Post #15





Grupa: Zarejestrowani
Postów: 450
Pomógł: 84
Dołączył: 27.11.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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.

Ten post edytował sniffer32 28.02.2010, 15:10:20
Go to the top of the page
+Quote Post
TNT
post 28.02.2010, 15:12:02
Post #16





Grupa: Zarejestrowani
Postów: 41
Pomógł: 2
Dołączył: 14.04.2007

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
changer
post 28.02.2010, 15:18:23
Post #17





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 26.06.2009

Ostrzeżenie: (0%)
-----


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ę"
Go to the top of the page
+Quote Post
Quantum
post 28.02.2010, 15:21:12
Post #18





Grupa: Zarejestrowani
Postów: 450
Pomógł: 84
Dołączył: 27.11.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


@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ą.

Ten post edytował sniffer32 28.02.2010, 15:28:47
Go to the top of the page
+Quote Post
changer
post 28.02.2010, 15:24:25
Post #19





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 26.06.2009

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Quantum
post 28.02.2010, 15:26:07
Post #20





Grupa: Zarejestrowani
Postów: 450
Pomógł: 84
Dołączył: 27.11.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


  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".

Ten post edytował sniffer32 28.02.2010, 15:27:58
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 12.06.2025 - 12:46