Avatar billede tdaugaard Nybegynder
20. juni 2001 - 00:54 Der er 32 kommentarer og
1 løsning

RegExp problem ..

Følgende funker MINUS... dvs. jeg får kun een match selvom der burde være en 7-8 stykker.

eregi(\">([0-9\\40-:]+)<\", $content, $regs);

$i=0;
$m=sizeof($regs)-1;
while ($i++ < $m) {
    echo $regs[$i].\"<br>\";
}


why doesn\'t it work !?!
Avatar billede qzar Nybegynder
20. juni 2001 - 00:59 #1
Jeg havde ikke i mine vildeste drømme forestillet med Tdaugaard stille et spørgsmål!
Avatar billede tdaugaard Nybegynder
20. juni 2001 - 01:42 #2
*LOL* ha ha ...
Avatar billede tdaugaard Nybegynder
20. juni 2001 - 01:43 #3
Ham der har opfundet PHP sproget må sku have været MEGET glad for penge med alle de $-tegn ;o)
Avatar billede jespernaur Nybegynder
20. juni 2001 - 20:56 #4
Jeg tror dit problem er: Når du i dit regulære udtryk bruger paranteser til at opsnappe
substrenge til senere behandling, vil du opnå 1 og kun 1 substreng for hvert
parantes-par i det regulære udtryk. Da du her kun har 1 parantes-par, vil der
kun opstå 1 substreng.

Du kan overveje at bruge split/spliti til at opdele $contents, men her skal du være
opmærksom på, at split\'s regulære udtryk gælder \'delimiteren\' mellem de strenge, der
skal bevares, så du bliver nok nødt til at \'negere\' dit oprindelige udtryk.

Mvh
Jesper Naur
Avatar billede tdaugaard Nybegynder
25. juni 2001 - 04:41 #5
jespernaur:> hmm .. okay .. på dansk ?
Jeg har næsten ingen forstand på regexp... men ehm .. jeg lavede RegExp pattern\'et i Visual Basic så jeg kunne teste hurtigt, og der virkede det fint !?
Avatar billede jespernaur Nybegynder
27. juni 2001 - 00:04 #6
OK, hvis vi skal videre her, skal vi tilbage til dit oprindelige spm og få defineret,
hvad problemet er, for det fremgår desværre ikke! Det bedste vil nok være et par
typiske eksempler på indholdet af $content, hver især med tilhørende angivelse af, hvad
du ønsker at opnå.

Derudover, da du senere har nævnt, at du som indledende øvelse har fået \'det\' (hvad
det så end er) til at virke i Visual Basic, var det måske en ide at vise VB-koden?

Mvh
Jesper Naur
Avatar billede tdaugaard Nybegynder
05. juli 2001 - 01:44 #7
hmm .. sorry ... jeg havde helt glemt mit spørgsmål her :-(
Jeg vender tilbage i morgen med eksempel på indhold af $content.
Avatar billede barefoot Nybegynder
09. juli 2001 - 16:36 #8
Jeg har også haft problemer med den måde at bruge $regs på.
Uanset hvad du gør så bliver der returneret 10 pladser i $regs.
Hverken mere eller mindre.

Hvad er det som du vil opnå med din kode?
Så er der måske en anden måde at lave den på...
Avatar billede tdaugaard Nybegynder
09. juli 2001 - 16:38 #9
Ja, det hørte jeg fra ljweb (snakked med ham på ICQ for noget tid siden omdet ..)
Men der er heller ikke mere end 10 matches, men den vil kun give mig EEN ...

Det er faktisk til at parse en del af \"Dine point\" siden her på eksperten.
Den skal hente det der står mellem > og <, dvs. antal point/oprettelses dato.

Avatar billede barefoot Nybegynder
09. juli 2001 - 16:42 #10
Hvad står der så i det ene resultat som du får?
Avatar billede tdaugaard Nybegynder
09. juli 2001 - 16:43 #11
Det er den første match .. lige et sec ..
Avatar billede tdaugaard Nybegynder
09. juli 2001 - 16:48 #12
Sådan her kan indholdet af $content se ud:

<input type=\"hidden\" name=\"i12\" value=\"0\"> <table border=\"0\" cellpadding=\"4\" cellspacing=\"0\"> <tr> <td><font face=\"verdana,arial,helvetica\" size=\"1\" color=\"#000000\">oprettelsesdato</font></td> <td align=\"right\"><font face=\"verdana,arial,helvetica\" size=\"1\" color=\"#000000\">1999-11-28 00:00:00</font></td> </tr> <tr> <td><font face=\"verdana,arial,helvetica\" size=\"1\" color=\"#000000\">point ved oprettelse</font></td> <td align=\"right\"><font face=\"verdana,arial,helvetica\" size=\"1\" color=\"#000000\">300</font></td> </tr> <tr> <td><font face=\"verdana,arial,helvetica\" size=\"1\" color=\"#000000\">point opsparet (568 dage * 5 point)</font></td> <td align=\"right\"><font face=\"verdana,arial,helvetica\" size=\"1\" color=\"#000000\">2840</font></td> </tr> <tr> <td><font face=\"verdana,arial,helvetica\" size=\"1\" color=\"#000000\">point tjent</font></td> <td align=\"right\"><font face=\"verdana,arial,helvetica\" size=\"1\" color=\"#000000\">58912</font></td> </tr> <tr> <td><font face=\"verdana,arial,helvetica\" size=\"1\" color=\"#000000\">point brugt</font></td> <td align=\"right\"><font face=\"verdana,arial,helvetica\" size=\"1\" color=\"#000000\">20064</font></td> </tr> <tr> <td><font face=\"verdana,arial,helvetica\" size=\"1\" color=\"#000000\">point ude</font></td> <td align=\"right\"><font face=\"verdana,arial,helvetica\" size=\"1\" color=\"#000000\">193</font></td> </tr> <tr> <td><font face=\"verdana,arial,helvetica\" size=\"1\" color=\"#000000\">banner point</font></td> <td align=\"right\"><font face=\"verdana,arial,helvetica\" size=\"1\" color=\"#000000\">18</font></td> </tr> <tr> <td><font face=\"verdana,arial,helvetica\" size=\"1\" color=\"#000000\"><b>i alt</b></font></td> <td align=\"right\"><font face=\"verdana,arial,helvetica\" size=\"1\" color=\"#000000\"><b>41813</b></font></td> </tr> </table> <p>eksperten.dk har korrigeret point afvigelsen.<p>opdateringen kan ses hvis du opdaterer siden. </font> </td> <td bgcolor=\"#000000\"><img src=\"/images/transparent.gif\" width=\"1\" height=\"1\" alt=\"\"></td> <td bgcolor=\"#3399cc\"> <table cellspacing=\"0\" cellpadding=\"0\" border=\"0\"> <tr bgcolor=\"#336699\"> <td><img src=\"/img/t.gif\" width=\"3\" height=\"2\"></td> <td colspan=\"3\"><font face=\"verdana,arial,
Avatar billede tdaugaard Nybegynder
09. juli 2001 - 16:49 #13
Og sådan ser resultatet af min kode her i spm.\'et ud:

1999-11-28 00:00:00







Avatar billede barefoot Nybegynder
09. juli 2001 - 16:57 #14
ereg(\">([0-9:-]+)<\", $content, $regs);

for ($i=0; < sizeof($regs); $i++) {
    echo \'1=> \'.$regs[$i].\"<br>\";
}

Prøv også med:
\">([0-9:-])<\"
\">([0-9:-]+)<\"
\">(+[0-9:-]+)<\"
\">+[0-9:-]+<\"

Jeg har aldrig fået helt styr på det med plusser og paranteser, så derfor er der lidt flere muligheder:-)

Prøv så at post alt hver der bliver udskrevet.
Avatar billede tdaugaard Nybegynder
09. juli 2001 - 16:59 #15
paranteser er til at groupe, gruppere matches. + betyder at \"0-9:-\" må være der flere gange .. altså ikke kun et enkelt tegn. Men prøver lige ..
Avatar billede barefoot Nybegynder
09. juli 2001 - 16:59 #16
Det skulle være:
for ($i=0; < sizeof($regs); $i++) {
    echo \"$i=> \".$regs[$i].\"<br>\";
}
Avatar billede tdaugaard Nybegynder
09. juli 2001 - 17:08 #17
ereg(\">([0-9\\40-:]+)<\", $content, $regs);

$i=0;
for ($i=0; $i< sizeof($regs); $i++) {
    echo \"$i=> \".$regs[$i].\"<br>\";
}

giver mig:

0=> >1999-11-28 00:00:00<
1=> 1999-11-28 00:00:00
2=>
3=>
4=>
5=>
6=>
7=>
8=>
9=>
Avatar billede barefoot Nybegynder
09. juli 2001 - 17:13 #18
Sjovt nok, for jeg får et helt andet resultat ved at bruge det som du postede lidt tidligere...:
0=> > <
1=>
2=>
3=>
4=>
5=>
6=>
7=>
8=>
9=>

Henter du det bare fra expertens side?
Avatar billede tdaugaard Nybegynder
09. juli 2001 - 17:21 #19
Hmm ..DET lyder underligt .. jeg kører PHP 4.05 på WinXP, IIS 5.1
Avatar billede barefoot Nybegynder
09. juli 2001 - 17:23 #20
Jeg brugte bare azeros webhotel da jeg ikke har fået installeret php igen siden jeg geninstallerede windows for et par dage siden...

Det er php 4.04 på en freebsd apache server....
Avatar billede tdaugaard Nybegynder
09. juli 2001 - 17:26 #21
Hmm .. lyder MEGET underligt ... men det ser ikke ud til det er sårn lige til at løse så :-(
Avatar billede barefoot Nybegynder
09. juli 2001 - 17:31 #22
nej, den se svær ud...

Jeg tænker lidt vidre og kommer tilbage hvis jeg finder en løsning...
Avatar billede tdaugaard Nybegynder
09. juli 2001 - 17:35 #23
oki doki :-)
Avatar billede barefoot Nybegynder
09. juli 2001 - 17:57 #24
Her er et stykke kode som leder et godt stykke i den rigtigte retning:

preg_match_all(\"/(>+[0-9\\: -]+<)/\", $content, $regs, PREG_PATTERN_ORDER);

for ($i=0; $i< sizeof($regs)-1; $i++) {
    for ($x=0; $x< sizeof($regs[$i]); $x++) {
        echo \"$x=> \".$regs[$i][$x].\"<br>\";
    }
}
Avatar billede tdaugaard Nybegynder
09. juli 2001 - 18:00 #25
DAMN ... $\'s everywhere ;o)
Jeg prøver lige. ..
Avatar billede barefoot Nybegynder
09. juli 2001 - 18:03 #26
Jep *G* $ er en ret smart måde at skrive variabler på... man bliver glad for den:-)
Måske også et lidt ironisk tegn i kraft af at php er opensource og derfor slet ikke har noget med $$$ at gøre...
Avatar billede tdaugaard Nybegynder
09. juli 2001 - 18:15 #27
*GG* nemmerlig .. og eftersom jeg normalt er VB/ASP\'er sååe harmonerer det ikke helt med at man i VB bruger $ til at angive en variabel af typen streng (minvar$ = \"dd\") *GG* lidt forvirrende ..

Men would you look at this:

0=> >1999-11-28 00:00:00<
1=> >300<
2=> >2840<
3=> >58912<
4=> >20064<
5=> >193<
6=> >18<
7=> >41813<

NICE ... taaaak!

smid lige et svar ..
Avatar billede barefoot Nybegynder
09. juli 2001 - 18:20 #28
Selvfølgelig:-)
Avatar billede barefoot Nybegynder
09. juli 2001 - 18:21 #29
Hvad gør du med > og < ? Er fjerner dem med str_replace();?
Avatar billede tdaugaard Nybegynder
09. juli 2001 - 18:22 #30
barefoot:> hmm ..så langt er jeg ikke nået, men havde regnet med noget substr() sjov ;o)
Avatar billede barefoot Nybegynder
09. juli 2001 - 18:39 #31
hmm, jeg troede at du ville acceptere mig...?
Avatar billede tdaugaard Nybegynder
09. juli 2001 - 18:42 #32
Nej da .. jeg bad dig bare om at svare for sjov ;o)
Ej .. jeg glemte det lige *G* sorry ...
Avatar billede barefoot Nybegynder
09. juli 2001 - 18:45 #33
Tak *S*
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