nordanMedlem sedan juni 2000949 inlägg Hur skall jag göra för att få denna kod nedan att funka?
Jag får detta felmeddelande när jag kör den
Warning: preg_replace(): Delimiter must not be alphanumeric or backslash
Är det så att jag lägger till / på orden som skall matchas så funkar det men då byter den ju ut så att det skrivs ut på detta sätt /vad/
Någon som kan förklara vad det är för fel jag har gjort?
$varde = array();
$replacement = array();
$string = "vad är detta? detta är strängen vars vissa ord skall bytas ut";
$word[] = "vad";
$word[] = "skall";
foreach ($word as $nyckel => $varde)
{
$replacement[] = '<b>'.$varde.'</b>';
echo $replacement[$nyckel];
}
echo preg_replace($word,$replacement,$string);
MatteMedlem sedan aug. 20002 975 inlägg Du måste ha en begränsare runt ditt reguljära uttryck.
Testa det här:
$string = "vad är detta? detta är strängen vars vissa ord skall bytas ut";
$word[] = "vad";
$word[] = "skall";
foreach ($word as $key => $val) {
$word[$key] = preg_quote($val);
}
$words = implode("|", $word);
echo preg_replace("/($words)/i", "<b>$1</b>",$string);
nordanMedlem sedan juni 2000949 inlägg Tack så mycket det funka bra.
Men eftersom jag vill lära mig mera om detta så måste jag fråga detta.
Varför använder du preg_quote($val); & $words = implode("|", $word);
Det funkar ju utan :-)
Jag vill bara veta varför så att jag lär mig mera för svaret på frågan har jag fått :-)
MeleaMedlem sedan juli 20033 147 inlägg preg_quote() tar och backslashar alla tecken som kan användas i ett reguljärt uttryck. Om du t.ex. hade haft en punkt i $string så hade uttrycket antagligen krackat ihop. :)
implode() lägger till | efter varje ord i $string. Ett |-tecken är samma sak som OR eller || (i ett reguljärt uttryck), det separerar alla orden i uttrycket och kollar om något av dessa matchar $word.
Rätta mig gärna om jag har fel.