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 DE-CIX
Edge computing: behandling ved kilden
Edge computing revolutionerer den måde, data behandles på, ved at bringe kapacitet og ydeevne tættere på dér, hvor der er behov for det.
15. april 2025
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