Avatar billede sylvesternielsen Nybegynder
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"
Avatar billede jakobdo Ekspert
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>';
?>
Avatar billede olebole Juniormester
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>
Avatar billede sylvesternielsen Nybegynder
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] => ""
        )
Avatar billede jakobdo Ekspert
09. oktober 2008 - 14:41 #4
Hvad med min kode ?
Avatar billede sylvesternielsen Nybegynder
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
Avatar billede olebole Juniormester
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?
Avatar billede jakobdo Ekspert
09. oktober 2008 - 17:38 #7
Du får et svar.
Avatar billede sylvesternielsen Nybegynder
09. oktober 2008 - 18:53 #8
Hej Ole,

Nej, det skulle være de overraskelser der måtte komme. :)
Avatar billede olebole Juniormester
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  =)
Avatar billede olebole Juniormester
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)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester