Avatar billede Slettet bruger
12. november 2008 - 11:00 Der er 24 kommentarer og
2 løsninger

Intelligent udhentning af data fra strings

Hej eksperter,

Findes der en indbygget metode til enkelt at udhente bestemte dele af strings? F.eks:

"Mit nick på Eksperten er hf2ke."
Resultater:
> "Mit" fra start til " nick på "
> "Eksperten" fra " nick på " til " er "
> "hf2ke" fra " er " til "."

Jeg mener at have set en anvendelse af det før - noget med:
metode("Blah blah %her er det vi gerne vil have ud af strengen% blah blaaah blah %her er noget mere% blah blah!")
Avatar billede xenoxsis Nybegynder
12. november 2008 - 11:11 #1
Altså hvis det du skal have hentet ud er omgivet af f.eks. % - Kan du bruge funktionen explode, så vil:

$split = explode("%", "Blah blah %her er det vi gerne vil have ud af strengen% blah blaaah blah %her er noget mere% blah blah!")

Så er:

$split[0] = "Blah blah "
$split[1] = "her er det vi gerne vil have ud af strengen"
$split[2] = " blah blaaah blah "
$split[3] = "her er noget mere"
$split[4] = " blah blah!"

Det er en mulighed, ellers ud fra hvad du skriver, skal du måske ud i noget Regular Expressions (http://www.regular-expressions.info/) - Ellers skriv lidt flere eksempler.

Og lige en ekstra ting, der kan godt laves en funktion hvor du skriver 2 ord, og den så giver dig dem og alt imellem. Det er bare noget løkke osv. - Var det det du mente?
Avatar billede wanze Nybegynder
12. november 2008 - 11:11 #2
Hvis det bare er bestemte ord du skal have ud, så kan du blot splitte dem og lave et array med explode(" ",$string), og pille tingene ud med $string[0],$string[3] og $string[5].
Avatar billede compac Seniormester
12. november 2008 - 15:10 #3
Jeg har et spørgsmål, som går på det samme:
Jeg har en variabel: $datovariabel som indeholder datooplysninger i formatet:
20081231
Jeg ønsker at få indsat streger således: 2008-12-31
Hvordan klarer jeg den?
Avatar billede xenoxsis Nybegynder
12. november 2008 - 18:14 #4
En nem måde compac er:

$nydato = substr($datovariabel,1,4) . "-" . substr($datovariabel,5,2) . "-" . substr($datovariabel,7,2)

Det er en simpel måde at gøre det. Der findes bedre måder, men til at starte med er dette hvad du skal bruge...
Avatar billede Slettet bruger
12. november 2008 - 19:19 #5
Hm. Jeg tror lige, jeg uddyber yderligere:
Jeg har behov for en metode til at omkonvertere mit eget lille scriptsprog med en gruppe enkelte kommandoer til HTML.

Et eksempel kunne være at ændre
<internallink>kage.html</internallink>
til
See <a title="Go to kage.html" href="kage.html">kage.html</a>

Regular Expressions lyder som noget af det rigtige... Men er det den letteste metode, og hvordan kan jeg gøre det?
Avatar billede olebole Juniormester
12. november 2008 - 20:10 #6
<ole>

"Et eksempel kunne være at ændre" >> Eksempler dur ikke til noget. Man skal vide præcis, hvad der skal skiftes med hvad. Ellers er det ikke til at opstille et søgemønster

/mvh
</bole>
Avatar billede compac Seniormester
12. november 2008 - 20:35 #7
Tak for hjælpen xenoxis.
Jeg korrigerede dog lige, så strengen starter med 0:

$nydato = substr($datovariabel,0,4) . "-" . substr($datovariabel,4,2) . "-" . substr($datovariabel,6,2)
Avatar billede xenoxsis Nybegynder
12. november 2008 - 22:04 #8
Regular expressions er lidt sværere at begive sig i kast med, og jeg er ikke selv helt i stand til at kode det med backreferences og alt det. Så der må du nok desværre søge på siden og læse om det. Jeg kan anbefale Regex Buddy til jobbet. Nemt at bruge og forklarer hvad din Regex gør.

Derudover vil jeg give olebole ret, da det er meget svært at vide hvad du vil uden at få et ret præcist eksempel...

compac: Ja jeg koder i 4 forskellige sprog hvor nogle er nulindekseret mens andre ikke er. Det er sku ikke helt til at holde styr på :) Men selv tak da :)
Avatar billede xenoxsis Nybegynder
12. november 2008 - 22:22 #9
Jeg prøvede faktisk lige hf2ke og denne sætning burde virke:

$string = "Hejsa <internallink>kage.html</internallink> bla bla"
$regexed = ereg_replace("<internallink>(.+?\..+?)</internallink>","<a title="Go to $1" href="$1">$1</a>",$string)

Prøv det engang - det virkede fint i min RegexBuddy :)
Avatar billede xenoxsis Nybegynder
12. november 2008 - 22:25 #10
I øvrigt sørger denne også for at der er et punktum i dit internallink - hvis der ikke er det, bliver den ikke replacet. Hvis du gerne vil have ALT (uanset hvad der står mellem <internallink> og </internallink>) replacet, skal du skifte "<internallink>(.+?\..+?)</internallink>" ud med "<internallink>(.+?)</internallink>"
Avatar billede olebole Juniormester
12. november 2008 - 22:34 #11
- men vær opmærksom på, preg-funktionerne som oftest performer væsentligt bedre end ereg  ;o)
Avatar billede Slettet bruger
12. november 2008 - 22:51 #12
Damn it!
Eksperten besluttede sig lige for, at jeg ikke skulle modtage mails, når I svarede... Pokker tag det.

Eksempel kontra definitionsbasered metaanmodning:
Tja, vi mennesker er nu engang kun mennesker :) Vi har tit svært ved at forstå præcise definitioner, da vi jo til hverdag aldrig tænker over dem - i stedet falder eksempler os naturlige, da hverdagens tankemønstre netop udgør sådanne... Hvilket også forklarer intelligens og til dels kreativitet. Derfor valgte jeg et eksempel.
... men her er en mere kynisk definition:
Jeg søger en metode der afhængigt af argumentspecificeret input samt grundstreng returnerer et array af strengværdier eller en ud fra grundstrængen transformeret resultatstreng udført ved hjælp af delstrengs-, delings- og videreførselsregler opgivet i det argumentspecificeredeinput.
Var det ikke lidt lettere at læse eksemplet (selvom det ikke var lige så præcist)?

xenoxsis:
Jo, det er lige det, jeg skal bruge :) Mange tak.

Performance:
Jeg sætter mig lige ind i det.
Avatar billede olebole Juniormester
12. november 2008 - 23:06 #13
hf2ke >> Der er ikke mange erhverv, der kræver mere kreativitet end programmørens, og gode programmører har efter min erfaring også en høj til meget høj intelligens. Ikke desto mindre er man som programmør, der ønsker at arbejde med søgemønstre (f.eks. RegExps), nødt til at være yderst specifik.
Man kan sagtens angive et søgemønster, der virker på ét enkelt eksempel, men skal det være mere generelt, er man pisket nødt til at kende _alle_ potentielle 'ting', der skal kunne findes.

Dit lille forsøg på sprogekvilibrisme er såmænd ganske morsomt, men desværre ikke væsentlig mere specifikt - og derfor lige ubrugeligt  =)
Avatar billede Slettet bruger
13. november 2008 - 08:24 #14
Ja :P Og se nu hvor meget tid vi har spildt ;)
Men jeg forstår godt, at du gerne vil have en præcis forklaring. Min erfaring siger mig bare, at det oftest er lettest med eksempler...
Og du har helt ret i, at gode programmører helst skal have noget i skallen - både med hensyn til intelligens og kretivitet.
Anyway. Jeg sætter mig ind i Regular Expressions.
Avatar billede xenoxsis Nybegynder
13. november 2008 - 09:47 #15
hf2ke: Jamen det var da så lidt. Jeg vil så også sige at eksempel nr. 2 var en del nemmere at forstå end eksempel nummer 1. nå skidt pyt.

olebole: Det er første gang jeg nogensinde har tænkt regex og php sammen, så når man går ind på php.net og søger regex, kommer ereg frem, men hvad gør preg bedre? (Jeg er bare nysgerrig)
Avatar billede olebole Juniormester
13. november 2008 - 09:56 #16
Funktionerne til Perl-kompatible RegExps er bare oftest hurtigere. Hvis du kikker under ereg_replace eller ereg_split, kan du også se, de faktisk selv nævner det  =)
Avatar billede Slettet bruger
13. november 2008 - 09:59 #17
Kage. Jeg sidder på HTX lige nu, så jeg må kikke på det, når jeg kommer hjem... Stupid education...
Avatar billede xenoxsis Nybegynder
13. november 2008 - 16:58 #18
Ja man lærer jo hver dag. Men syntax'en er den samme går jeg ud fra?
Avatar billede olebole Juniormester
13. november 2008 - 22:07 #19
Nej, der er en del væsentlige forskelle på posix- og perl-RegExps.

http://dk2.php.net/manual/en/book.pcre.php
http://dk2.php.net/manual/en/book.regex.php
Avatar billede Slettet bruger
13. november 2008 - 23:59 #20
Hmmm... Hvad med preg_replace?
Avatar billede xenoxsis Nybegynder
14. november 2008 - 09:44 #21
Jamen jeg tænker at regex patterns er ens for posix- og perl-regexes?
Avatar billede Slettet bruger
18. november 2008 - 20:25 #22
Oooleee :)
Avatar billede Slettet bruger
18. november 2008 - 21:07 #23
Damn it! Jeg har læst en masse tuts på nettet men forvirrer bare mig selv. Derfor ville jeg være meget glad, hvis jeg kunne få jer til at besvare et simpelt eksempel:

$Statement = "Something something kage1er2godt nemlig ja!"

Jeg ønsker "kage1er2godt" i ovenstående modificeret, så de tekststykker 1 og 2 symboliserer (altså det der står på disse pladser i forhold til "kage", "er" og "godt") bliver 1 og 2 i følgende erstatningstekst: "Cola1var2nice".
F.eks bliver "Something something kageguf er supergodt nemlig ja!"
til "Something something Colaguf var supernice nemlig ja!"

Sætningerne giver ingen højere mening, men jeg håber, I forstår, hvad jeg mener :) Nu er det i hvert fald forklaret med flere definerende beskrivelser og eksempler på to niveauer! ;)
Avatar billede Slettet bruger
27. november 2008 - 13:17 #24
Ingen løsningsforslag?
Avatar billede xenoxsis Nybegynder
01. december 2008 - 09:43 #25
Jeg må lige give dig svar lidt senere når jeg har bedre tid, bare lige så du ikke tror at ingen kigger på det.
Avatar billede Slettet bruger
01. december 2008 - 12:13 #26
Ah, mange tak :) Forresten har jeg al tid i Verden... Dvs. jeg skriver studieretningsprojekt til og med på fredag, så inden da får jeg nok ikke kikket på det uanset hvad.
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