Morten Forsker
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
cpufan Novice
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);
Morten Forsker
28. maj 2020 - 20:26 #2
Is this wrong?
$content[] = preg_replace('/\b'.$orignal.'\b/u', $replace, $product_full_description);

The text is gone.
cpufan Novice
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
Morten Forsker
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.
Morten Forsker
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.
Morten Forsker
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
cpufan Novice
29. maj 2020 - 20:49 #8
Smid dblquotes omkring variablen i preg replace så tror jeg den er derå
Morten Forsker
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);
cpufan Novice
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);
Morten Forsker
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;
            }
Morten Forsker
02. juni 2020 - 13:38 #12
Lukker tråd
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

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





Premium
Test: Lenovos seneste budget-basker kan det hele - man skal dog leve med en alt for synlig svaghed
Computerworld tester Lenovos Ideapad 5. Maskinen er stærk, prisen er skarp og designet er vellykket. Men der er stadig en god grund til at springe modellen over.
Job & Karriere
Regner din ferie væk? Brug tiden på at søge en af disse otte stillinger, der er ledige netop nu
Det sjasker ned over hele Danmark. Du kan bruge de våde sommerdage på at søge et af disse otte job, der er ledige lige nu.
White paper
Cisco Webex: Giv medarbejderne fleksible arbejdsforhold med et højteknologisk og sikkert webbaseret online-mødesystem
Corona-krisen har for alvor gjort fleksible arbejdsforhold til dagligdag, og for mange virksomheder bliver det også en del af fremtiden. En vigtig del af den udvikling er sikre og effektive samarbejdssystemer, så medarbejdere kan holde møder med hinanden, kunder, leverandører og andre samarbejdspartnere i høj kvalitet. I dette whitepaper fra Netteam får du indsigt i Cisco Webex, som er et webbaseret online mødesystem. Det er en sikker og brugervenlig løsning, der integrerer både audio, video og webkonferencer. Et enkelt tryk på knappen og du er i gang med et møde, hvor du kan se, høre, skrive på whiteboard og dele dokumenter med andre mødedeltagere. Det hele er beskyttet af Cisco Talos sikkerhedsintelligens, som er markedets stærkeste beskyttelse mod cyberangreb.