08. oktober 2008 - 14:24
Der er
9 kommentarer og 1 løsning
Split af streng på mellemrum men ikke imellem "
jeg skal have splittet en streng på mellemrum, men der må ikke splittes på mellemrum i teksten som står i "" Eksempel: 637 1 -1 "fornavn efternavn" "" 378 -1 2 "bruger" "598"
Annonceindlæg fra Novataris
Vejen til devops med Bavarian Nordic
Bavarian Nordics vækst blev starten på et DevOps-samarbejde med Novataris for hurtigt at kunne tilpasse IT-organisation til forretningen.
7. december 2023
08. oktober 2008 - 15:25
#1
Jeg tror det tangerer til verdens grimmeste kode, men det virker. :o) <?php //http://www.eksperten.dk/spm/848323 $str = '637 1 -1 "fornavn efternavn" ""'; if(preg_match_all('/".*?"/', $str, $output)){ for($i = 0; $i < count($output[0]); $i++){ $replacement = str_replace(' ','#|#',$output[0][$i]); $str = str_replace($output[0][$i],$replacement,$str); } } $parts = split(' ',$str); for($i = 0; $i < count($parts); $i++){ $parts[$i] = str_replace('#|#',' ',$parts[$i]); } echo '<pre>'; print_r($parts); echo '</pre>'; ?>
08. oktober 2008 - 18:17
#2
<ole> $s = '637 1 -1 "fornavn efternavn" ""'; preg_match_all("/(-?\d+)|(\".*?\")/", $s, $match); // for ($i=0,$j=count($match[0]); $i<$j; $i++) print $match[0][$i]."<br>"; for ($i=0,$j=count($match[0]); $i<$j; $i++) print $match[1][$i]."<br>"; - om du kikker i $match[0] eller $match[1], afhænger af, om du vil have gåseøjnene med eller ej =) /mvh </bole>
09. oktober 2008 - 14:27
#3
Ole, din løsning ser ud til at fungere ud over at der også bliver splittet ved - F.eks. +4522771051 -1 -1 18991230-000000 18991230-000000 "Sylvester Nielsen" "" [20] => Array ( [0] => 4522771051 ) [21] => Array ( [0] => -1 ) [22] => Array ( [0] => -1 ) [23] => Array ( [0] => 18991230 ) [24] => Array ( [0] => -000000 ) [25] => Array ( [0] => 18991230 ) [26] => Array ( [0] => -000000 ) [27] => Array ( [0] => "Sylvester Nielsen" ) [28] => Array ( [0] => "" )
09. oktober 2008 - 14:41
#4
Hvad med min kode ?
09. oktober 2008 - 16:08
#5
Jeg har fået din kode til at fungere jakob. Det viste sig at der var nogle special tegn i strengen, så den ikke fungerede med split. Smider du et svar. // Sylvester
09. oktober 2008 - 16:19
#6
Jamen, det er sådan, det er med regulære udtryk ... man skal vide helt præcis, hvad der kan stå. Ellers er det umuligt at lave et søge-pattern. Jeg kan se, der både kan stå bindestreg og plus ... kan der stå andet, vi ikke ved noget om?
09. oktober 2008 - 17:38
#7
Du får et svar.
09. oktober 2008 - 18:53
#8
Hej Ole, Nej, det skulle være de overraskelser der måtte komme. :)
09. oktober 2008 - 19:15
#9
Men det savner for mig enhver logik, at nogen strenge er escaped, mens andre ikke er det. 18991230-000000 er således en streng, der vel burde være escaped. Var det et tal, burde der nemlig stå: 18991230, for så står der jo 18991230 minus 0. Ellers burde der have stået '18991230-000000' ;o) Anyway, så burde denne kunne gøre det: <?php $s = '+637 123-456 -1 "fornavn efternavn" ""'; preg_match_all("/([+-]?[0-9-]+)|(\".*?\")/", $s, $match); for ($i=0,$j=count($match[0]); $i<$j; $i++) print $match[0][$i]."<br>"; ?> - og undskyld mig, men den er en del mere 'sexy' end jakobdo's ... hvilket han sikkert selv er den første til at indrømme =)
09. oktober 2008 - 19:19
#10
PS: Den sidste linje var ikke en 'fisketur efter points'! Dem er jeg for såvidt rystende ligeglad med ;o)
Vi tilbyder markedets bedste kurser inden for webudvikling