webForumDet fria alternativet

Warning: preg_replace(): Delimiter must not be alphanumeric or backslash

3 svar · 443 visningar · startad av nordan

nordanMedlem sedan juni 2000949 inlägg
#1

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
#2

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
#3

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
#4

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.

132 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)