[PHP] 'preg_replace en lookahead' lukt niet goed

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • xantos
  • Registratie: Juni 1999
  • Niet online
Ik ben aan het klungelen met een preg_replace die niet helemaal werkt zoals die zou moeten doen.

Ik heb in mijn database een veld met daarin html-code. Deze pagina wordt op het scherm getoond en woorden kunnen eventueel ge-highlight worden. Hiervoor gebruik ik de volgende functie:

code:
1
$page = preg_replace("|([^a-z-_=])($keyword)([^a-z-_=])(?![^<]*>)|i","$1<span style=\"background-color:#99CEF2\">$2</span>$3",$page);

Bovenstaande code moet woorden ($keyword) markeren met een kleurtje als:
-deze niet in een html tag staan
-het woord niet begint of eindigt met 'a-z', '-' of '_'.

Dit werkt voor bijna al mijn pagina's.
Er is echter één uitzondering: dit is een test <b>zinnetje</b>.

Het woord zinnetje zou nu gemarkeerd moeten worden maar dat is niet het geval. Ik begrijp niet waarom... Het woord eindigt niet op [a-z-_=] en staat niet tussen html tags.

Kan iemand me misschien verder helpen?

Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

het staat wel tussen html-tags :)

is kort geleden nog een topic over geweest, ik kijk even voor je ...

edit: hier heb je misschien wat aan

edit #2: het woord niet begint met a-z?! bedoel je dat het niet met een hoofdletter kan beginnen ofzo? klinkt me niet erg logisch in de oren..

[ Voor 60% gewijzigd door X-Lars op 26-01-2004 12:58 ]


Acties:
  • 0 Henk 'm!

  • xantos
  • Registratie: Juni 1999
  • Niet online
Sorry..ben niet helemaal duidelijk geweest.

Het mag inderdaad wel tussen html tags staan maar niet IN een tag.

Ik zal je link eens bekijken. bedankt hiervoor!

Acties:
  • 0 Henk 'm!

  • xantos
  • Registratie: Juni 1999
  • Niet online
X-Lars schreef op 26 januari 2004 @ 12:55:
het staat wel tussen html-tags :)

is kort geleden nog een topic over geweest, ik kijk even voor je ...

edit: hier heb je misschien wat aan

edit #2: het woord niet begint met a-z?! bedoel je dat het niet met een hoofdletter kan beginnen ofzo? klinkt me niet erg logisch in de oren..
Nee.. ik doe dit om te voorkomen dat als ik het woord 'fiets' wil markeren ook het woord 'racefiets' wordt gemarkeerd. Dat wil ik namelijk niet!

Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

xantos schreef op 26 januari 2004 @ 13:01:
[...]
Nee.. ik doe dit om te voorkomen dat als ik het woord 'fiets' wil markeren ook het woord 'racefiets' wordt gemarkeerd. Dat wil ik namelijk niet!
dan zou je toch moeten check of er een SPATIE voor of na komt?

edit: sorry, je doet dat wel goed denk ik, je kijkt of er NIET een letter of teken voor of na komt.. |:(

[ Voor 19% gewijzigd door X-Lars op 26-01-2004 13:03 ]


Acties:
  • 0 Henk 'm!

  • xantos
  • Registratie: Juni 1999
  • Niet online
Als het woord aan het begin voorkomt staat er geen spatie voor. Bovendien kan er ook punt (.) achter het woord staan.

Een check op spatie levert dus niet het gewenste resultaat op.

Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

wordt een aardige preg_replace, maar je kunt toch het toch zo doen dat er wel niets voor mag staan en dat er een punt (.) achter mag staan? naast de huidige checks die al gebeuren

weet er niet het fijne van, zoek gewoon ff op GoT en Google, moet genoeg over te vinden zijn

Acties:
  • 0 Henk 'm!

  • xantos
  • Registratie: Juni 1999
  • Niet online
Het gaat ook meer om de 'negative lookahead' die ik gebruik niet om de [^a-z etc...]. Er zullen vast wel andere oplossingen zijn maar ik vraag me gewoon af waarom die mij niet werkt. :?

Iemand anders misschien?

Acties:
  • 0 Henk 'm!

  • xantos
  • Registratie: Juni 1999
  • Niet online
Ik vermoed dat het probleem 'm zit in het feit dat er een check wordt gedaan of er geen a-z character achter het keyword staat en tegelijker tijd ook een lookahead plaatsvind.

Is dit misschien op te lossen?

Ik weet dat er andere topics zijn over dit onderwerp maar ik heb gewoon een vraagje over mijn preg_replace functie en waarom deze niet werkt.
Pagina: 1