Avatar billede melao Nybegynder
25. juni 2003 - 23:57 Der er 6 kommentarer

Replace Regulært alt undtagen tal uden for apranteserne

Hejsa,

jeg har haft den her før, men der blev blandet Pearl ind i det ved en fejl, prøvede efter min logiske evne at lave det til PHP - men kunne ikke få det til at virke :).

Jeg har en linie:
• Lille pakke3 ( 200 kr)
sådan kunne dne se ud, eller sådan her
• Uden Domæne 553= ( 130 kr)

alt uden for paranteserne skal fjernes inklusiv dem, samt alt inden i som ikke er tal. Ud over løsningen vil jeg blive meget glad for links der beskriver
Regulært Udtryk :).

Vh. Casper
Avatar billede jakoba Nybegynder
26. juni 2003 - 00:04 #1
om regulære udtryk:
http://dk2.php.net/manual/en/pcre.pattern.syntax.php
kik også på de andre sider der linkes til ude tilvenstre i den side.
Avatar billede jakoba Nybegynder
26. juni 2003 - 00:17 #2
dit regulære udtryk kunne være noget i retning af:
    "/\([^\d\)]*(\d*)[^\)]*\)/"
den søger efter:
      \(         
start parentes (der skal \ foran for at understrege at det er bogstavert '(' der menes.
        [^\d\)]*
0 eller flere bogstaver der hverken er cifre \d eller bogstaver ')'
                (\d*)
her bruges ( of ) i betydningen husk denne del af det du finder. de cifre der står indeni den parentes (bogstavet) vi fandt.
                    [^\)]*
o eller flere bogstaver der ikke er en slutparentes.
                          \)
bogstavet ')'

Så alt ialt bliver det til "find et sæt parenteser og husk det tal der står inedeni dem"

prøv:
  $linie = "Lille pakke3 ( 200 kr)";
  $talstr = preg_replace( "/\([^\d\)]*(\d*)[^\)]*\)/", "\\1", $linie );
  echo $linie ." indeholder: " .$talstr ."<br>";

mvh JakobA
Avatar billede melao Nybegynder
26. juni 2003 - 22:37 #3
jakoba det funger godt nok, men den mangler en tin som jeg ikke rigtig kan knække. Den skal også fjerne alt ude for paranteserne.
I føle manual burde \. start & til slut?

\
general escape character with several uses

.
match any character except newline (by default)

Prøver jeg det virker det slet ikke.
?

Vh. Casper
Avatar billede jakoba Nybegynder
26. juni 2003 - 22:58 #4
tegnet . uden \ foran matcher hvilketsomhelst tegn
tegnet . med \ forar matcher kun tegnet . (punktum)

hvis du skriver .*  forrest i strengen vil de scanne hele vejen igennem din streng og mathche det hele. så den vil aldrig finde '('

så vi ønsker en 'match alting undtagen '(' forrest, og en match 'alting' bagerst.
og en ting til wi ønsker at KRÆVE at hele den match vi finder starter ved strengens begyndelse of slutter ved strengens ende. det gøres med ^ og $
    $talstr = preg_replace( "/^[^\(]\([^\d\)]*(\d*)[^\)]*\).*$/", "\\1", $linie );
bemærk at tegnet ^ har to meget forskellige betydninger. forrest i en [] klamme betyder det 'alle andre tegn end'. allerforrest i udtrykket betyder det 'begyndelsen af strengen'

mvh JakobA
Avatar billede melao Nybegynder
27. juni 2003 - 00:23 #5
Jeg er meget glad for den hjælp du gir :).
Men syntes stadigvæk ikke jeg kan få det til at virke, tror der er en syntaxt fejl i Reg.Ud. da den nu sletn ikke skipper noget
http://melao.users.whitehat.dk/text.php

For at bruge eksemplet vil jeg have:
Lille pakke3 ( 200 kr) indeholder: Lille pakke3 ( 200 kr)
til at se sådan her ud
Lille pakke3 ( 200 kr) indeholder: 200
Avatar billede jakoba Nybegynder
27. juni 2003 - 00:32 #6
ups. jeg glemte en stjerne efter [^\(] så den kan skippe forbi alle ikke-'(' tegn.
    $talstr = preg_replace( "/^[^\(]*\([^\d\)]*(\d*)[^\)]*\).*$/", "\\1", $linie );
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