Avatar billede bamzen Nybegynder
13. oktober 2005 - 00:25 Der er 13 kommentarer

RegExp til data parser

Hej, Har følgende input...

1457 54239 ~~¤ Maginot ¤~~ 0 40 5.334 + -
1496 * 5265 ~~¤ Wolff. ¤~~ 0 40 5.117 + -
1514 * 65347 ~~¤ WX_Havkat ¤~~ 0 39 5.080 + -
1515 * 82065 online ~~¤Kimmerne¤~~ 0 40 5.075 + -
1556 108337 ~~¤johnna-tøsen¤~~ 0 56 4.893 + -

Nu kunne jeg godt tænke mig at få et array med:

første tal, andet tal, tekstreng (uden det eventuelle online), tredie tal, fjerde tal, og femte tal (uden punktum).

Altså at denne linie:
1515 * 82065 online ~~¤Kimmerne¤~~ 0 40 5.075 + -

blev til

$tmp = Array(1515,82065,"~~¤Kimmerne¤~~",0,40,5075);

Havde tænkt mig det skulle gøres med regexp... men how...
Avatar billede plx Nybegynder
13. oktober 2005 - 01:17 #1
Du kan prøve noget i denne stil

if($cnt = preg_match_all("/(\\d+)[\\D]+(\\d+)[^~]+(~~¤[^¤]+¤~~) (\\d+) (\\d+) ([\\d.]+)/", $text, $matches, PREG_SET_ORDER)){

    for($i=0; $i<$cnt; $i++){

        $tal1 = $matches[$i][1];
        $tal2 = $matches[$i][2];
        $nick = $matches[$i][3];
        $tal3 = $matches[$i][4];
        $tal4 = $matches[$i][5];
        $tal5 = str_replace(".", "", $matches[$i][6]);

        echo "$tal1<br>$tal2<br>$nick<br>$tal3<br>$tal4<br>$tal5<hr>";
    }
}
Avatar billede plx Nybegynder
13. oktober 2005 - 01:40 #2
Denne performer bedre

if($cnt = preg_match_all("/^(\\d+)[\\D]+(\\d+)[^~]+(~~¤[^¤]+¤~~) (\\d+) (\\d+) ([\\d.]+)/m", $text, $matches, PREG_SET_ORDER)){
Avatar billede bamzen Nybegynder
13. oktober 2005 - 06:33 #3
men lader bare ikke til at fange noget som helst......
Avatar billede bamzen Nybegynder
13. oktober 2005 - 07:53 #4
Det her er det reelle input

623 38416 ~~¤ SIFosien¤~~ (høvding) 5 111 15.736  + -
10 52861 WX_RudeBwoy  0 209 40.128  + -
367 98693 ~~¤Barracuda¤~~  0 132 18.363  + -
405 108988 ~~¤ Lyngerne ¤~~  0 167 17.680  + -
434 87185 WX_Odins Disciple  0 146 17.307  + -
456 56599 ~~¤ Ronaldinho ¤~~  0 175 17.092  + -
473 109119 ~~¤Black Scar¤~~  0 117 16.880  + -
491 108458 LilleGrimmeLouise  0 116 16.638  + -
493 56468 putero  1 112 16.618  + -
530 28131 ~~¤Flommer¤~~  0 111 16.299  + -
573 107143 ~~¤ Joms ¤~~  0 110 16.045  + -
578 56343 Chief SilverDragon  0 109 16.012  + -
619 107969 Mnc_  0 134 15.762  + -
635 55456 online ~¤Gragans OPMIP¤~  0 116 15.684  + -
710 89680 online ~~¤LilleUlvOPMIP¤~  0 106 15.336  + -
716 58996 online ~~¤ Amarth ¤~~  0 116 15.318  + -
731 31493 ~~¤ Gertrude ¤~~  0 104 15.184  + -
855 98075 ~~¤Octavii¤~~  0 110 14.524  + -
884 65347 ~~¤ WX_Havkat ¤~~  0 103 14.431  + -
911 109125 Runolf - Hævneren  0 103 14.395  + -
923 5265 ~~¤ Wolff. ¤~~  0 115 14.374  + -
927 54034 Ghettoen [Nor]  0 100 14.349  + -
964 89857 ~~¤Arme Finn¤~~  0 101 14.138  + -
989 54239 ~~¤ Maginot ¤~~  0 100 14.112  + -
990 86080 ~~¤Calinka¤~~  0 100 14.111  + -
993 88141 ~~¤ Mysilini ¤~~  0 100 14.106  + -
1027 71890 ~~¤Ridder Wolf¤~~  0 103 13.842  + -
1034 108337 ~~¤johnna-tøsen¤~~  1 107 13.825  + -
1039 82065 ~~¤Kimmerne¤~~  0 100 13.809  + -
1048 70811 Patrizia  1 112 13.777  + -
1076 1176 ~~¤Cableguy¤~~  0 104 13.607  + -
1080 104362 [fu] Sjael \m/  0 114 13.595  + -
1119 110535 fjols  0 94 13.251  + -
1124 84912 ~~¤ Staal Khan¤~~  0 97 13.213  + -
1125 64000 Sølvpil  5 95 13.190  + -
1154 108159 online ~~¤ Ynge* ¤~~  5 92 12.889  + -
1175 110526 ~~xFenrisulvenx~~  0 92 12.740  + -
1210 102623 Gubi  1 100 12.482  + -
1234 89731 ~~¤ Harry ¤~~  0 88 12.296  + -
1265 54285 ~~¤KlanBabe¤~~  0 96 12.016  + -
1273 91787 ~~¤ Sol_OPMIP ¤~~  5 88 11.952  + -
1278 102108 WX_DåseMakrellen  0 158 11.915  + -
1293 34614 ~~¤ Einstein ¤~~  0 80 11.726  + -
1302 109411 ~~¤ Shifter II ¤~~  0 83 11.626  + -
1620 4931 ~~¤ Frigg ¤~~  0 97 8.471  + -
Avatar billede jakobdo Ekspert
13. oktober 2005 - 08:45 #5
Hvad med denne:
preg_match_all('/^(\\d+)\\s(\\d+)\\s(.+?)\\s(\\d+)\\s(\\d+)\\s(\\d+.\\d+)\\s\\s\\+\\s\\-/m', $input, $output);
Avatar billede coderdk Praktikant
13. oktober 2005 - 12:51 #6
Jeg skulle lige til at lave en, men jakobdo har vist lavet den jeg ville :)
Avatar billede bamzen Nybegynder
13. oktober 2005 - 13:42 #7
Hej

Det virker sgi stadig ikke... hmmm
kan i prøve at forklare den linie... så kan det være jeg selv kan få øje på fejlen?
Avatar billede jakobdo Ekspert
13. oktober 2005 - 13:54 #8
^ = starten af linien.
(\\d+) = 1 eller flere tal
\\s = mellemrum
(\\d+) = se ovenover
\\s = se ovenover
(.+?) = alle tegn indtil den møder et mellemrum og tal...
\\s = se ovenover
(\\d+) = se ovenover
\\s = se ovenover
(\\d+) = se ovenover
\\s = se ovenover
(\\d+.\\d+) = et eller flere tal, et punktum og et eller flere tal
\\s\\s = 2 mellemrum
\\+\\s
\\- = et minus-tegn ( - )
/m = ^$ virker på linier og ikke hel tekst.
Avatar billede bamzen Nybegynder
13. oktober 2005 - 16:22 #9
Det er denne del der ikke virker

\\s\\+\\s\\-
Avatar billede jakobdo Ekspert
13. oktober 2005 - 16:24 #10
Det tekst du har smidt her i tråden indeholder da: MELLEMRUM MELLEMRUM + MELLEMRUM -
Kunne det tænkes nogle af de mellemrum evt er tabs eller andet?
Avatar billede plx Nybegynder
13. oktober 2005 - 19:24 #11
Hvis du kan få første del til at virke, er det helt fint. + - informationen skal du ikke bruge til noget, så det kan du fint skære væk fra dit udtryk
Avatar billede bamzen Nybegynder
14. oktober 2005 - 01:20 #12
jakobdo og plx, vil i være søde at svare, så jeg kan give point for den gode hjælp?
Avatar billede jakobdo Ekspert
14. oktober 2005 - 06:22 #13
Svar!
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

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