Avatar billede madsens90 Praktikant
15. januar 2010 - 17:55 Der er 4 kommentarer og
1 løsning

Preg_match problem. Hjælp til reggex?

Hej eksperter!

Jeg har et lille problem (som i nok har regnet ud) som jeg håber i kan hjælpe med.

Jeg har lavet mig en tagwall hvor jeg for sjov skyld vil lave en bot som at man kan skrive til, og den så skal svarer.

Har lavet en måde hvorpå at man kan sætte et spørgsmål ind i min MySQL, og et svar der passer til spørgsmålet.

Sådan at hvis man skriver :bot "hej", svarer min bot "Hej (navn)".

Har fået det til at virke at den kigger databasen igennem for ord, og ved hjælp af preg_match siger mit script om brugerens spørgsmål passer til noget i databasen.

Indtil videre er der kun spørgsmålet:

Hej bot!

I databasen, hvortil der er svaret:

Hej (navn)!

(navn) bliver skiftet ud med brugerens navn automatisk (virker også).

Som jeg skrev før har jeg fået det til at virke hvis man skriver hej til botten, at den så svarer hej (navn).

Man kan skrive "hej", "bot", eller "hej bot", og få svaret "hej (navn)".

Men mit problem er hvis du skriver "hej med dig bot", så kommer min preg_match tilbage negativ på grund af de midterste ord.

Hvordan løser jeg dette? Mit teste script ser lige nu sådan ud:

$besked = $_GET['besked'];

$besked = preg_replace('/ /', "(.*?)", $besked);

$besked = "/" . $besked . "/";

$spg = "hej bot!";
$svr = "Hej (navn)!";

if (preg_match("$besked", "$spg")) {
    echo "$svr";
} else {
    echo "øv bøv bæv!";
}

Det at jeg udskifter "mellemrum" med (.*?) var et forsøg på at "overse" alt mellem "hej" og "bot".

Håber i kan hjælpe!!!

Mvh. Christian.
Avatar billede repox Seniormester
15. januar 2010 - 18:31 #1
Prøv den her:



<?php

<?php

  $regexp = "#^hej\s.*bot$#i"; // Din regexp

  $string = "hej med dig bot";

  if(preg_match($regexp, $string)) //TRUE
    echo "Hej (navn)";


  $string = "hej bot";

  if(preg_match($regexp, $string)) //TRUE
    echo "Hej (navn)";

  $string = "og så kan man jo sige: hej med dig bot";

  if(preg_match($regexp, $string)) //FALSE
    echo "Hej (navn)";


?>
?>

Avatar billede madsens90 Praktikant
15. januar 2010 - 19:02 #2
har ændret det lidt til:

$regexp = "#^hej\s.*bot$#i"; // Din regexp

$string = $_GET['besked'];

if(preg_match($regexp, $string)) {
echo "Hej (navn)1"; //TRUE
}else{
echo "Hej (navn)2"; //FALSE
}


Det virker rigtig godt, men hvis $string = "hej", så bliver den false. Er der en måde jeg kan ændre det på?
Avatar billede repox Seniormester
15. januar 2010 - 19:06 #3
Du vil ændre det således at hvis strengen starter med hej, så skal botten svare uanset?
Avatar billede madsens90 Praktikant
15. januar 2010 - 19:34 #4
Nej okay. Kan selvfølgelig godt se det giver komplikationer senere. :)

Kom med et svar. :D

Tak for hjælpen!
Avatar billede repox Seniormester
15. januar 2010 - 19:36 #5
Det fik du her
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