Sliipeetais Posted August 16, 2004 Report Share Posted August 16, 2004 (edited) Man ir dots skaitlis (no 1 līdz 15) un sekojoša virkne - kautkas(1);kakis(2);suns(3);maaja(4); u.t.t. līdz 15. Ar kādu regulāro izteiksmi, zinot skaitli, es varu iegūt tam atbilstošo vārdu? Piem., es zinu skaitli "2", rezultātā izdod "kakis". Edited August 16, 2004 by Sliipeetais Link to comment Share on other sites More sharing options...
hu_ha Posted August 16, 2004 Report Share Posted August 16, 2004 nu es to realizētu ar masīvu: $str="kautkas(1);kakis(2);suns(3);maaja(4)..."; $mas=explode(";",$str); echo $mas[1]; //izdos kakis(2) Link to comment Share on other sites More sharing options...
Venom Posted August 16, 2004 Report Share Posted August 16, 2004 '#;?([^\(]+)\('.$number.'#' Link to comment Share on other sites More sharing options...
Sliipeetais Posted August 16, 2004 Author Report Share Posted August 16, 2004 (edited) Venom, ja tas pārāk neapgrūtina, lūdzu izskaidro soli pa solim, ko kurš katrs simbols šajā r. i. paveic. Esmu mācījies regulārās izteiksmes (pašmācībā, http://www.regular-expressions.info), taču pagaidām vēl par šo tēmu man nav nostrādājis kaut kāds loģikas klikšķis. Edited August 16, 2004 by Sliipeetais Link to comment Share on other sites More sharing options...
Venom Posted August 16, 2004 Report Share Posted August 16, 2004 dotajā variantā es tāpatās pielietotu masīvu: $str="kautkas(1);kakis(2);suns(3);maaja(4)..."; $kovaig=4; $mas=explode(";",$str); $tmp=$mas[$kovaig]; $tmp=explode('(',$tmp); echo $tmp[0]; //izdos kakis mazliet pamainīts preg.variants: '#;?([^\(;]+)\('.$number.'\)#' nozīmē: ## "separatori", var izmantot pierastos / ;? - var būt vai arī nebūt priekšā semikols ([^\(;]+) vismaz viens simbols kas nav "(" (lai aizietu "līdz (") vai ";" (lai sāktu no ";" uz priekšu), ja iespējams, atkārtoti, tas viss tiek pārtverts iekš $1 {sīkāk: [] apzīmē simbolus kopu, +, ka simbols no kopas var atkārtoties vismaz vienu reizi, ^ priekšā simbolu kopai apzīmē "ne" - jebkurš simbols izņemot } \( pirms numura "(" vajadzīgais nummurs pēc numura ")" citādi uz "2" meklēšanu kopētu arī (23) Ja eclubs piecelsies, var pamācīties iekš VenRExp Link to comment Share on other sites More sharing options...
Sliipeetais Posted August 16, 2004 Author Report Share Posted August 16, 2004 Paldies! Link to comment Share on other sites More sharing options...
Sliipeetais Posted August 16, 2004 Author Report Share Posted August 16, 2004 (edited) Njā, un es tikai tagad aptvēru, ka jamais variants ar masīvu manā gadījumā neder, jo, ir iespējams, ka skaitļi nav sakārtoti secīgi, piem. kautkas(100); britnija(1); agvilera(50) u.t.t. Edited August 16, 2004 by Sliipeetais Link to comment Share on other sites More sharing options...
Venom Posted August 16, 2004 Report Share Posted August 16, 2004 kāpē? ja mazliet pielabo... $str="kautkas(1);kakis(2);suns(3);maaja(4)..."; $kovaig=4; $mas=explode(";",$str); /* mas = array (kautkas(1), kakis(2), suns(3) ...) */ $correct=array(); while($tmp=array_shift($mas)) { //$tmp=text(1) $tmp=str_replace('(','|',$tmp);//$tmp=text|1) $tmp=str_replace(')','|',$tmp);//$tmp=text|1| $tmp=explode('|',$tmp); //$tmp=array( text, 1, '' ) $correct[$tmp[1]]=$tmp[0]; //$correct[number]=text } echo $correct[$kovaig]; Ja vajag izvadīt vairākus "kovaig", tad šis variants varētu būt efektīgāks par preg. Link to comment Share on other sites More sharing options...
Recommended Posts