Avatar billede learner Praktikant
19. december 2012 - 16:25 Der er 7 kommentarer og
1 løsning

hjælp med preg_match

Jeg vil gerne have hjælp med at trække et nummer ud af en streng.

der skal stå "rekv " efterfulgt et nummer i kommentaren
der må gerne stå noget efter nummeret

eksempelvis disse gyldige kommentarer:
"rekv 999 helsam"
"rekv 999"
"rekv 999 davs"
"rekv 999 davs 99 hej"
"REKV 999"
"rekv. 999 davs"
"REKV. 999 davs 99 hej"

<?php
preg_match('/rekv(?.) (?P<digit>\d+)(.*)/i', $kommentar, $matches);
if ($matches['digit']>0){
  // der står "rekv " eller "REKV " efterfulgt af et nummer
  if ($matches['digit']==9999){
    // nummeret er 9999
  }
}
?>

1. Har jeg gjort det korrekt?

2. hvis jeg nu har tusindvis af disse kommentarer som skal evalueres, skal jeg så først if (stripos($kommentar, 'rekv ') !== false)){} først fordi det går hurtigere ???
Avatar billede olebole Juniormester
19. december 2012 - 16:35 #1
<ole>

Prøv:

preg_match('/^rekv\.? (\d+)/i', $kommentar, $match);
var_dump($match);


/mvh
</bole>
Avatar billede olebole Juniormester
19. december 2012 - 16:38 #2
- jeg kan ikke forestille mig, det går hurtigere at køre to funktioner pr. kommentar
Avatar billede learner Praktikant
19. december 2012 - 17:56 #3
Tak Ole

Skal (.*) så slet ikke med?
hvis der står et eller andet vås efter tallet(999) så skal den bare se bort fra det.

Jeg skal bruge tallet efter rekv senere (som $matches['digit'])

skal den så se således ud?
preg_match('/^rekv\.? (?P<digit>\d+)(.*)/i', $kommentar, $matches);


skal jeg så
if (preg_match('/^rekv\.? (?P<digit>\d+)(.*)/i', $kommentar, $matches)){...

eller
preg_match('/^rekv\.? (?P<digit>\d+)(.*)/i', $kommentar, $matches);
if ($matches['digit']){...
Avatar billede olebole Juniormester
19. december 2012 - 18:07 #4
Du behøver ikke skrive det sidste punktum. Min kode kikker ikke efter, hvad der måtte stå efter den første blok af tal. Da det ikke skal bruges, er der ingen grund til at kikke efter det.

'Kineserhatten' (^) i begyndelsen betyder: 'begyndelsen af strengen'. 'rekv' skal altså stå helt i begyndelsen af strengen for at opfylde mønstret.

Havde jeg nu afsluttet mit mønster med $ - som betyder 'slutningen af strengen', så skulle jeg have skrevet noget efter talblokken - ligesom du gør. For så ville mønstret skulle matche hele strengen - fra begyndelse til slutning.

Min matcher en eller anden streng, som begynder med 'rekv' - muligvis efterfulgt af et forkortelsestegn (punktum) - efterfulgt af et mellemrum - efterfulgt af en talblok. Alt derefter er min kode ligeglad med.

Håber, det hjalp  =)
Avatar billede learner Praktikant
19. december 2012 - 18:19 #5
Det hjalp ;o)

Kan du også forklare mig hvorfor ?-tegnet i starten af (?P<digit>\d+) ?

Tusind tak Ole
Avatar billede olebole Juniormester
19. december 2012 - 21:07 #6
Det er bare syntaksen for et navngivet subpattern  =)

Link til referencen
Avatar billede olebole Juniormester
19. december 2012 - 21:09 #7
- og selv tak. Du lægger bare et accepteret svar, as usual  *<|:o)
Avatar billede learner Praktikant
22. december 2012 - 12:24 #8
Tak for hjælpen :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