Avatar billede MikkelHanson Nybegynder
29. januar 2010 - 20:28 Der er 11 kommentarer og
2 løsninger

Match specifikt ord med kolon

Hej Eksperter.

Jeg har fået til opgave at opdatere webshop, fra tekstfiler til dynamisk - emnet er php.

Der findes en meget lang liste, hvori disse ord fremtræder typisk mere end én gang.

$string = "KUNDE: KUNDE: jeg forstår ikke hvad du skriver";
$string = "KUNDE: KUNDE: KUNDE: nu siger den read error";

Disse ord KUNDE: vil jeg så gerne lige match en gang for at begrænse til ét ord.

Har prøvet følgende, uden videre held.

(^(KUNDE:)$}

/KUNDE:/

([\w]{5})\:(?![\w]{5}\:)

Men ovenstående tager alle ord på 5 bogstaver som har kolon efterfulgt.

Nogen der ved hvordan hulen jeg løser problemet?

PS Jeg er meget grøn i emnet reg.exp
Beklager på forhånd hvis jeg lyder ulogisk.
Avatar billede ksoren Nybegynder
29. januar 2010 - 21:11 #1
prøv:

$string = preg_replace("/^(KUNDE: )*/", 'KUNDE: ', $string);
Avatar billede MikkelHanson Nybegynder
29. januar 2010 - 21:22 #2
Min kode ser sådan ud:

$tekst = "Kunde: Kunde: har du tid";

$match = preg_replace("/^(KUNDE:)*/", "KUNDE:", $tekst);

print $match;

Giver følgende:

Kunde: Kunde: har du tid
Avatar billede MikkelHanson Nybegynder
29. januar 2010 - 21:24 #3
Men før jeg skal replace, skal jeg vel først matche om ordet overhovedet indgår mere end én gang i teksten?

Hvis true, så preg replace på ordet KUNDE:

Sådan har jeg forstået det
Avatar billede ksoren Nybegynder
29. januar 2010 - 21:24 #4
Den er case sensitive som den er nu. Hvis det altid er "Kunde", så ændrer du det bare til det.
Avatar billede MikkelHanson Nybegynder
29. januar 2010 - 21:27 #5
Altså match er jo som regel [a-z] eller noget i den dur, men når der indgår et kolon bliver jeg i tvivl.

([KUNDE\:])i som jeg troede virkede.

Beklager spam.
Avatar billede ksoren Nybegynder
29. januar 2010 - 21:44 #6
De der firkantede dimser fungerer ikke helt som du tror.

http://www.php.net/manual/en/regexp.reference.squarebrackets.php
Avatar billede MikkelHanson Nybegynder
30. januar 2010 - 16:25 #7
Fandt følgende løsning:

/KUNDE:/

Den matcher perfekt, men hvordan skal jeg forholde mig hvis ordet opstår mere end én gang.

$str = "KUNDE: KUNDE: Det virker nu";
$str = "KUNDE: Ikke igen";
$str = "Ikke igen";

Linje 1 skal matche og replace med "KUNDE: Det virker nu" og linje 2 + 3 skal der ikke lave replace på.

Jeg er ude i noget ca..

$match = preg_match("/KUNDE:/", $str, $match);

if(count($match > 1)){ preg_replace ..

Nogle der kan hjælpe mig lidt videre eller irettesætte mig hvis jeg er helt gal på den?
Avatar billede MikkelHanson Nybegynder
30. januar 2010 - 16:47 #8
Fandt sku en løsning vha. explode og implode, så det virker med random ord - hvis der opstår mere end ét af gangen.

$str = "KUNDE: Det virker nu";
$str = "KUNDE: KUNDE: Det virker nu";

Linje 1 giver "KUNDE: Det virker nu" og linje 2 giver "KUNDE: Det virker nu"

Lige præcis det jeg ville, perfekt!

Læg et svar ksoren2 :-)
Avatar billede MikkelHanson Nybegynder
30. januar 2010 - 17:36 #9
Skriv et svar ksoren2 - så deler vi sku 70/30 i porten.
Avatar billede tjp Mester
30. januar 2010 - 18:45 #10
En løsning ku måske også være:
preg_replace('/(\w+: )\1+/', '$1', $tekst)

Den fjerner gentagelser af ord efterfulgt af kolon og mellemrum.
Avatar billede MikkelHanson Nybegynder
30. januar 2010 - 19:06 #11
Virker også perfekt, læg et svar tjp
Avatar billede tjp Mester
30. januar 2010 - 20:22 #12
:-)
Avatar billede MikkelHanson Nybegynder
05. februar 2010 - 14:49 #13
ksoren2 lagde aldrig et svar, så tjp og jeg deler.
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
Kurser inden for grundlæggende programmering

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