| Autor | Zpráva | ||
|---|---|---|---|
| hal_sk Profil |
#1 · Zasláno: 7. 5. 2011, 21:41:15 · Upravil/a: hal_sk
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 |
#2 · Zasláno: 7. 5. 2011, 21:44:47
regulární výrazy? hledej trošku :)
|
||
| Stano Profil |
#3 · Zasláno: 7. 5. 2011, 22:29:15
ú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 |
#4 · Zasláno: 9. 5. 2011, 19:53:41
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 |
#5 · Zasláno: 9. 5. 2011, 22:31:16
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); |
||
|
Časová prodleva: 14 let
|
|||
0