Autor Zpráva
hal_sk
Profil
Zdravím. Chcel by som v PHP parsovať napr. titulkové súbory *.sub, ktoré vyzerajú takto nejak:
"{212}{475}Uvidime sa!
{980}{1042}{styl:nejaky}Jasne
"
Takýto string (napríklad) by som chcel rozparsovať a uložiť do array, ktoré bude vyzerať takto:
array(
0 => array("frame_beg" => 212, "frame_end" => 475, "content" => "Uvidime sa!"),
1 => array("frame_beg" => 980, "frame_end" => 1042, "content" => "{styl:nejaky}Jasne")
);

Aj by som to vedel, ale prasácky. Predpokladám, že na to je nejaká systematika, môžete ma nakopnúť nejakým kľúčovým slovom, alebo priamo zdrojákom? Dík.
ShiraNai7
Profil
regulární výrazy? hledej trošku :)
Stano
Profil
úplne konkrétne hľadáš funkciu preg_match_all() regulárny výraz si už zisti sám. to budeš často potrebovať
hal_sk
Profil
Z regulárov mám stále guláš. Ja som to nakoniec parsoval takto (parsovanie jedného riadku titulkov):
function microDvdParser($str)
{
 $val1="";
 $val2="";
 $val3="";
 
 $i=0;
 $a=0;
 $b=0;
 while(isset($str[$i]))
 {
  $chr=$str[$i];
  
  if($a>1 && $b>1)
  {
   $val3.=$chr;
  }
  
  if($chr=="{")
  {
   $a++;
  }

  if($chr=="}")
  {
   $b++;
  }
  
  if($a==1 && $b==0)
  {
   if(is_numeric($chr))
   {
    $val1.=$chr;
    $val1ok=true;
   }
  }
  
  if($a==2 && $b==1)
  {
   if(is_numeric($chr))
   {
    $val2.=$chr;
    $val2ok=true;
   }
  }
  
  $i++;
 }

 if(!isset($val1ok) || !isset($val2ok) || $val1>$val2)
 {
  return false;
 }

 return array((int) $val1,(int) $val2, (string) $val3);
}
Keeehi
Profil
Rozhodně by jsi se je ale měl naučit. Potom se ten tvůj 50 řádkový kód srazí na jediný řádek.
$vstup="{212}{475}Uvidime sa!
{980}{1042}{styl:nejaky}Jasne";
preg_match_all('~\{(\d+)\}\{(\d+)\}(.*)~u', $vstup, $nalezy, PREG_SET_ORDER);
print_r($nalezy);

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: