Avatar billede Morten Professor
28. maj 2020 - 11:40 Der er 11 kommentarer og
1 løsning

Find and replace the excact word

Hej

Jeg har nogle problemer med at få min code til kun at replace et ord og ikke tage noget af ordet, hvis der feks står navyblå og har en csv fil hvor der står blå som skal erstattes med blue, men kun hvis ordet ikke har andre bogstaver end kun blå skal den ikke pille ved den. Det skal kun være ord der kun har blå.

Så den lader være med at oversætte navyblå.
Til navyblue, så skal den ikke gøre noget ved ordet.

Har prøvet med preg_replace('/\b'. $orignal .'\b/', $replace, $product_full_description);
Men så kommer der ikke nogen tekst frem.

Her er det noget kode jeg er igang med.

$orignal = array();
    $replace = array();
    $content = [];
    if (($handle = fopen("*************", "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {

            $comma_separated = str_replace(';', ', ', $data);
            $mapArray = array_map('utf8_encode', $comma_separated);
            $arrayTostring = implode(', ', $mapArray);

            $stringToArray = explode(', ', $arrayTostring);

            $country = $stringToArray[0];
            $orginalWord = $stringToArray[1];
            $replaceWord = $stringToArray[2];

            $product_full_description = $product->get_description();

            $orignal[] = $orginalWord;
            $replace[] = $replaceWord;



        }


            $content[] = str_replace($orignal, $replace, $product_full_description);
    }
    fclose($handle);

    return implode(', ', $content);
}

Med venlig hilsen
Morten
Avatar billede cpufan Juniormester
28. maj 2020 - 12:46 #1
You want to use regular expressions. The \b matches a word boundary.
$text = preg_replace('/\bHello\b/', 'NEW', $text);
If $text contains UTF-8 text, you'll have to add the Unicode modifier "u", so that non-latin characters are not misinterpreted as word boundaries:
$text = preg_replace('/\bHello\b/u', 'NEW', $text);
Avatar billede Morten Professor
28. maj 2020 - 20:26 #2
Is this wrong?
$content[] = preg_replace('/\b'.$orignal.'\b/u', $replace, $product_full_description);

The text is gone.
Avatar billede cpufan Juniormester
29. maj 2020 - 11:22 #3
Hvorfor bruger du et array?

Hvis det er pga flere udskiftninger, skal du køre et loop igennem array
Avatar billede Morten Professor
29. maj 2020 - 20:15 #4
Hej

Jeg har prøvet at lave en foreach på den.
foreach (array_combine($orignal, $replace) as $orig => $repl) {
            $content = preg_replace('/\b'.$orig.'\b/u', $repl, $product_full_description);


        }

Men giver ikke en tekst erstatning den skifter ikke ordet ud.
Avatar billede Morten Professor
29. maj 2020 - 20:25 #5
Min foreach kommer med den data den skal. men det er som om preg_replace ikke vil godtage mine vaiabler, for der står noget i dem.

Når jeg hard koder som feks.
preg_replace('/\b'."sort".'\b/u', "black", $product_full_description)
Virker det fint. lige som det skal.
Avatar billede Morten Professor
29. maj 2020 - 20:27 #6
$content = preg_replace('/\bSort\b/u', "BLACK", $product_full_description); så virker det. bare ikke med mine variabler selv om der kommer noget ud af dem fra foreach når jeg echo
Avatar billede cpufan Juniormester
29. maj 2020 - 20:49 #8
Smid dblquotes omkring variablen i preg replace så tror jeg den er derå
Avatar billede Morten Professor
30. maj 2020 - 07:01 #9
Er det nogenlunde sådan, syntes ikke jeg kan få det til at virke:

preg_replace(preg_quote('/\b'.$orig.'\b/u', ''), $repl, $product_full_description);
Avatar billede cpufan Juniormester
30. maj 2020 - 10:38 #10
Tag et kig på denne istedet for:

$string = 'The quick brown fox jumps over the lazy dog.';
$patterns = array();
$patterns[0] = '/quick/';
$patterns[1] = '/brown/';
$patterns[2] = '/fox/';
$replacements = array();
$replacements[2] = 'bear';
$replacements[1] = 'black';
$replacements[0] = 'slow';
echo preg_replace($patterns, $replacements, $string);
Avatar billede Morten Professor
30. maj 2020 - 12:41 #11
Hej

Nu går det da helt i kage for mig nu udskriver den kun en value i array

$patterns = array();
            $replacements = array();
            foreach (array_combine($orignal, $replace) as $orig => $repl) {


                $patterns[] = '/'.$orig.'/';
                $replacements[] = $repl;
                $content = preg_replace($patterns, $replacements, $product_full_description);

                echo "PATTERNS ". print_r($patterns). "<br>";

                echo "REPLACEMENTS " . print_r($replacements);



                return $content;
            }
Avatar billede Morten Professor
02. juni 2020 - 13:38 #12
Lukker tråd
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