Autor Zpráva
NefungujeMiTo
Profil *
Zdravím, v php potřebuji regulární výraz, předem upozornuji, regulární výraz, nikoliv explode apod.

Jedná se o regulární výraz, který dosadím do preg_match v PHP.

Mám řetězec : "řetězec,float,float,float,(tohle chci),řetězec".

Čili pregmatch vytáhne to, co je mezi řetězci v takovémto tvaru.
Markit
Profil *
<?php
$Data = "řetězec,float,float,float,TOHLE 1 2 3,řetězec";
preg_match("/řetězec,float,float,float,(.+?),řetězec/", $Data, $Match);
print_R($Match);
NefungujeMiTo
Profil *
Tím řetězcem může být třeba "sdfs,1.5,2.3,4.8,(tohle chci),jsdfh"

To "řetězec" a "float" byl náznak datového typu.
Markit
Profil *
Dúfal som, že sa s tým trošku pohráš.
Preg by mal vyzerať takto: /(\S+),(\d+(?:\.\d+)?),(\d+(?:\.\d+)?),(\d+(?:\.\d+)?),(.+?),(\S+)/
NefungujeMiTo
Profil *
Díky za snahu, bohužel to nefunguje, nevím na čí straně je chyba.

$str = "retezec,retezec,dalsi,10.5,retezec,retezec,retezec,dalsi,11.5,retezec,";
preg_match_all("/(\S+),(\d+(?:\.\d+)?),(\d+(?:\.\d+)?),(\d+(?:\.\d+)?),(.+?),(\S+)/", $str, $out);
var_dump($out);



Ok, moje chyba, je tam decimal, bohužel když dumpnu pole, tak je tam rozcuckovanej celej ten string, já potřebuji pouze ten float


Nyní to mám takto,
<?php
$str = "retezec,5,5,5,10.5,retezec";
preg_match_all("/(\S+),(\d+(?:\.\d+)?),(\d+(?:\.\d+)?),(\d+(?:\.\d+)?),(.*),(\S+)/", $str, $out);
var_dump($out);
?>

Funguje to, ale do toho pole potřebuji uložit pouze ten jeden float, nikoliv vše, při dumpu to vypíše každou část stringu.
Joker
Profil
NefungujeMiTo:
Nebylo by jednodušší toto?
explode(",", $string)[4]
Tori
Profil
NefungujeMiTo:
Kterou z těch čtyř pětek chcete?
NefungujeMiTo
Profil *
Potřebuji tu pětku před koncem, podle reguláru, jde o to, že mám textový soubor, kde mám v tomhle stylu asi 100 řádků a z každého tohoto řádku potřebuji dostat jeden údaj a to ten, který následuje po 3 floatech a za ním je řetězec.

Z téhle stránky mám feed toho textového souboru : http://finance.yahoo.com/q/hp?s=DMND&a=06&b=21&c=2013&d=01&e=6&f=2014&g=d.

Je tam několik set řádků, dole je download tabulky, která je v txt.

Hodnota každé bunky je v textovém souboru oddělena čárkou, asi takhle : text,text,text,text

A já potřebuji z každého řádku vybrat 5 hodnotu, tedy Close price v tabulce.

Děkuji všem za ochotu a vytrvání.
Tori
Profil
NefungujeMiTo:
Funguje to, ale do toho pole potřebuji uložit pouze ten jeden float, nikoliv vše
A v čem je problém?
$str = "retezec,5,5,5,10.5,retezec";
preg_match_all("/(\S+),(\d+(?:\.\d+)?),(\d+(?:\.\d+)?),(\d+(?:\.\d+)?),(.*),(\S+)/", $str, $out);
$cislo = $out[5][0]; // opraveno, byly prohozené indexy.
var_dump($cislo);
NefungujeMiTo
Profil *
Váš kod mi vyhodil null a problém je v tom, že to nemohu takhle ukládat, bude tam 100 řádků a z každé jedna hodnota.
Moderátor jenikkozak: Prosím, nezakládej nám tu duplicitní vlákna.
abc
Profil
$d = str_getcsv(file_get_contents("table.csv"), ",");
//var_dump($d);
for ($i = 11; $i < count($d); $i += 6) {//prvni je v 11, dalsi potom v +6
    echo $d[$i] . "<br>";
}
Kubo2
Profil
NefungujeMiTo:
Čo takto fgetcsv? (Teoreticky) funkčný kód:
<?php
$fp = fopen("filename", 'r');
$floates = [];
if($fp) {
  while(!feof($fp)) {
    $row = fgetcsv($fp);
    if(!is_null($row[0])) {
      $floates[] = (float)$row[4];
    }
  }
  fclose($fp);
}
midlan
Profil
U částí které nechceš v $out použij uzávorkování bez zpětné reference.
(vytvoří ref)(taky vytvoří)
(?:nevytvoří ref)(vytvoří)
Tori
Profil
Opravená verze, jestli teda chcete použít jen reguláry:
$file = file_get_contents('table.csv');
preg_match_all("/^([\d-]+)(?:,[\d.]+){3},([\d.]+),/m", $file, $out, PREG_PATTERN_ORDER);
var_dump($out[2]);
- v $out[1] jsou všechny datumy, v $out[2] jsou všechny "close prices".

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: