Avatar billede Baarup Nybegynder
07. august 2012 - 23:31 Der er 20 kommentarer og
1 løsning

Hjælp til preg_replace

Kære eksperter.

Jeg får en fejl med følgende kode:
$row_chat['msg'] = preg_replace($brugerinfo['nick'], "<font color=FF9900><b>$brugerinfo[nick]</b></font>", $row_chat['msg']);

Og kan ikke helt hitte ud af hvordan jeg skal rette det til, fejlen er denne:
Warning: preg_replace() [<a href='function.preg-replace'>function.preg-replace</a>]: Delimiter must not be alphanumeric or backslash.

Håber i kan hjælpe mig.
Mange tak
Avatar billede olebole Juniormester
08. august 2012 - 00:38 #1
<ole>

Første argument i kaldet til preg_replace skal være et regulært udtryk

/mvh
</bole>
Avatar billede NielsErikP Mester
08. august 2012 - 00:40 #2
Hej...

Mangler der ikke SingleQuotes her :

$row_chat['msg'] = preg_replace($brugerinfo['nick'], "<font color=FF9900><b>$brugerinfo['nick']</b></font>", $row_chat['msg']);


Prøv og se Her :
Avatar billede Baarup Nybegynder
08. august 2012 - 00:45 #3
Hvordan får jeg det så til at virke, kan du give et eksempel ole?
Avatar billede olebole Juniormester
08. august 2012 - 00:51 #4
#3: Det kommer lidt an på, hvad der kan forventes at stå i variablen, men prøv noget i denns stil:

$row_chat['msg'] = preg_replace('/\b'.$brugerinfo['nick'].'\b/', "<font color='#FF9900'><b>$brugerinfo[nick]</b></font>", $row_chat['msg']);

- og så har FONT-tags i øvrigt været deprecated i 12-13 år  *o)
Avatar billede olebole Juniormester
08. august 2012 - 00:54 #5
#2: Når arraykaldet står escaped i dobbelte gåseøjne, skal der ikke sættes enkelte omkring arraynøglen. Udenfor gåseøjne har du fuldstændig ret - men der bruger spørgeren dem også  =)
Avatar billede olebole Juniormester
08. august 2012 - 01:03 #6
#2: php.net har en meget god gennemgang. Prøv at scrolle lidt ned til afsnittet More examples to demonstrate this behaviour. Næsten nederst:

// This will not work, and will result in a parse error, such as:
// Parse error: parse error, expecting T_STRING' or T_VARIABLE' or T_NUM_STRING'
// This of course applies to using superglobals in strings as well
print "Hello $arr['fruit']";
print "Hello $_GET['foo']";
Avatar billede limemedia Nybegynder
08. august 2012 - 10:07 #7
Når du kender alle parametre for det du gerne vil udskifte, er preg_replace langsom i forhold til fx str_replace

str_replace(mixed search, mixed replace, mixed subject [, int &count])

$row_chat['msg'] = str_replace($brugerinfo['nick'], '<font color=FF9900><b>'.$brugerinfo['nick'].'</b></font>');
Avatar billede olebole Juniormester
08. august 2012 - 16:57 #8
#7: Jeg er helt enig i, at man ikke bør bruge RegExp, når de kan undgås, hvorfor mit udgangspunkt da også et ganske kort sekund var at bruge str_replace. Det stod ligeså hurtigt klart, at den ikke duer til at løse opgaven med.

Hvad mon der sker med ord som 'kjole', 'skole', 'mole', 'fole', 'nolekstraktion' osv, osv - hvis brugerens nick er 'ole'?  *o)
Avatar billede limemedia Nybegynder
08. august 2012 - 17:07 #9
ja ja, og hvad så med "Niels Ole" - så virker din boundary heller ikke :)

ligger mere op til at baarup skal tænke sig mere om ...
Avatar billede olebole Juniormester
08. august 2012 - 17:50 #10
Nå, så det er baarup som skal tænke sig om? Du skulle ikke have tænkt dig om og leveret en løsning med dramatisk færre fejl?  :D
Avatar billede limemedia Nybegynder
08. august 2012 - 18:18 #11
haha same old olebole :)
samme "fejl" i begge, om du bruger en delimiter du ikke kan regne med eller jeg bruger et delnavn går vel ud på det samme

løsningen for baarup er at lave et output der ikke skal replaces i, i første omgang og ikke bagefter - men som du selv nævner, når det er på html3 niveau, kan man ikke forvente php'en er på første niveau
Avatar billede olebole Juniormester
08. august 2012 - 18:43 #12
Det må du nok forklare nærmere
Avatar billede limemedia Nybegynder
08. august 2012 - 18:49 #13
\b er en word boundary
hvis der er mellemrum i hans nick .... nok forklaring eller ?
Avatar billede olebole Juniormester
08. august 2012 - 18:59 #14
Du er nu en sjov snegl. I #11 bruger du masser af ord - som jeg i hvertfald ikke får mening ud af. I #13 er du så pludselig enormt fedtet med ord  *LoL*

Ja, '\b' er en word boundary. Det ved jeg jo godt - ellers havde jeg selvfølgelig ikke brugt den ... og derfor var det naturligvis ikke det, jeg spurgte om  *o)
Avatar billede limemedia Nybegynder
08. august 2012 - 19:06 #15
Du kan få det på hvilken måde du gerne vil, med eller uden ord - up to you

Og hvis ikke det er sammenligningen mellem mit eksempel der kan acceptere et delord eller dit eksempel der kan acceptere et delnavn, er det vist mere dig der skal forklare dig nærmere - da begge løsninger i sidste ende ikke vil fungere i et produktionsmiljø

End of the day, tror jeg han leder efter at gøre egne kommentarer fede, så løsningen i loopet der skriver chat beskederne ud skal nok inkludere en if sætning der sætter en boolean om navnet skal farves og boldes eller ej

Var det så ord nok, for mange eller hvad ?
Avatar billede olebole Juniormester
08. august 2012 - 19:31 #16
Nej tak, det er ganske passende til at afgøre, at du vrøvler  =)

En airbag kan ikke afbøde alle dødsfald ved sammenstød. Da den kan afbøde en rigtig mange, er det naturligvis langt bedre at bruge en airbag, end ikke at bruge én.

Da #7 slipper langt flere fejl igennem end #4, er #4 selvsagt langt bedre end #7 - uagtet, at #4 ikke er perfekt.

Da du afleverer en 'løsning', som fungerer ringere endnu end den, der allerede er afleveret - og som du mente at gøre bedre - er der vel ikke noget galt i at opfordre dig til at tænke dig om  =)
Avatar billede limemedia Nybegynder
08. august 2012 - 19:53 #17
Kom to html tags rundt om navnet, som manden helt sikkert har og min rammer og er hurtigere end preg_replace nogen sinde ville drømme om at kunne blive - om hans kode så har en <td> en <div> eller hvad han nu ellers har, må han vide når det ikke er inkluderet i selve spørgsmålet

Summa sumarum, bør det løses på en helt anden måde uden hverken preg_replace der virker nogle gange og str_replace som virker færre gange - men i ethvert produktionsmiljø vil begge aldrig køre i drift, da det skal virke hver gang

Om det så er en fejl der slipper igennem eller to, er mig underordnet - det skal bare virke, virke hver gang og uden undtagelser - og det kan man så håbe spørgeren kan tænke sig til - eller som håbet kunne stille et intelligent ekstra spørgsmål om så man rent faktisk kunne lære manden noget
Avatar billede olebole Juniormester
08. august 2012 - 20:59 #18
Med alle de tanker rendende rundt i hovedet, undrer det mig så bare, at du i et påstået forsøg på at rette noget, der ikke fungerede, kommer op med en løsning, som er endnu mere elendig.

Uanset, hvormeget du forsøger at sløre virkeligheden og tørre din dummert af i ærmet på andre, må vi slå fast, at det var en middelsvær dummert  *o)

"eller som håbet kunne stille et intelligent ekstra spørgsmål om så man rent faktisk kunne lære manden noget" >> Ja, når du nu ikke kan stille dig selv den slags spørgsmål, må man jo håbe, spørgeren kan  =)
Avatar billede NielsErikP Mester
08. august 2012 - 22:31 #19
Hej..

#4og #5:

Prøver at kigge på det.. og tak du gamle ;-)
Avatar billede olebole Juniormester
08. august 2012 - 22:39 #20
#19: Anytime  *o)
Avatar billede Baarup Nybegynder
15. januar 2014 - 19:08 #21
lukkes
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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