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: 13 let
|
0