[PHP] REGexp probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
PHP:
1
2
3
4
5
6
7
$color = array ('#FFFF00', '#00FFFF', '#00FF00');
$highlight = split(" ", $highlight);
for($i = 0; $i < (count($highlight)); $i++)
{
    $pattern = "/$highlight\\[$i\]/i";
    $result = preg_replace($pattern, "<span bgcolor=$color[$i]>$highlight[$i]</span>",$result);
}


Ik heb hier een probleempje ik ben een highlighting aan het maken voor een search, die per gevonden woord een andere kleur neemt. Maar mijn probleem zit hem in het pattern. De woorden waar hij op moet zoeken staan in de array highlight. Hij moet zoeken op het woord en niet niet letten op hoofd en kleine letters. Ik heb de [] al ge escaped. Maar dan nog wil hij het niet doen. Zie ik hier iets doms over het hoofd?

[ Voor 15% gewijzigd door Verwijderd op 09-01-2003 12:34 ]


Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 17-09 07:55

thomaske

» » » » » »

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Verder is $ een metacharacter. Zie PCRE pattern syntax

Een $ moet je dus escapen.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ok het is gelukt bedankt voor de tips

Acties:
  • 0 Henk 'm!

  • Ericston
  • Registratie: Maart 2001
  • Laatst online: 23-06 23:17
Standaard debugging. Echo alles wat je op een dubieuze manier (variabelen binnen dubbele aanhalingstekens etc.) genereert.
PHP:
1
$pattern = "/$highlight\\[$i\]/i"; // Wat wijs je hier aan $pattern toe? Juist ja...

In je code is explode() trouwens sneller dan split() dat met regexp patterns werkt.

En je kan natuurlijk een hele mooie regex genereren door die spaties in $highlight te vervangen met |'s en vervolgens met dat pattern gebruik te maken van de PCRE variabele \\0 (de match). Scheelt je een loop.

[ Voor 31% gewijzigd door Ericston op 09-01-2003 15:31 . Reden: d->t + advies ]