Keyword highlite buiten html-regex (Femme?)

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
In de changelog stond het volgende:
05-02: Nieuw regex voor het highlighten van keywords naar een zoekopdracht (zie 2 februari). Er wordt nu alleen buiten HTML tags gereplaced (thanks thanks Onno).
Ik ben benieuwd hoe die regex in mekaar steekt omdat ik het zelf nooit voor mekaar heb gekregen...

Acties:
  • 0 Henk 'm!

Verwijderd

Zoiets:
PHP:
1
2
3
4
5
<?
$regex = "!>[^<]*?($keyword)[^<]*?<!is";

$text = preg_replace($regex, FOO, $text);
?>

Acties:
  • 0 Henk 'm!

  • Onno
  • Registratie: Juni 1999
  • Niet online
Die specifieke regex zwerft wel ergens in LA rond trouwens... was wel zoiets als die van Arien geloof ik. :)

Acties:
  • 0 Henk 'm!

Verwijderd

Je kunt tijdelijk een > voor en < na de string plakken als de string niet met een tag begint en eindigt.

Acties:
  • 0 Henk 'm!

  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 03-09 14:12
Op donderdag 08 maart 2001 02:48 schreef Arien het volgende:
Zoiets:
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?
$regex = "!>[^<]*?($keyword)[^<]*?<!is";







$text = preg_replace($regex, FOO, $text);
?>
Hier pakt ie ook gewoon de code die binnen tags staat :(

[update]
Effe opzoek gegaan naar dat ding van Onno en ziehier:
PHP:
1
2
3
4
5
6
7
<?
$regex = "/(>[^<]*)(" . $keyword . ")/is";



$text = preg_replace($regex, FOO, $text);
?>

werkt wel ok bij mij
[/update]

Acties:
  • 0 Henk 'm!

Verwijderd

Ggrrmmbbll... /me wordt een beetje moe van regexen in PHP. |:(

Misschien ben ik ook niet helemaal helder meer :P, maar waarom moet PHP altijd proberen in een keer alles te vervangen als ik dat niet wil? :? |:( :(

Nou ja, morgen dan maar... :Z

Acties:
  • 0 Henk 'm!

  • Marcel van Veen
  • Registratie: Maart 2000
  • Laatst online: 18-09 12:48
Nou, lukt mij niet :(
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?
php







$text="<b>BLAAT!</b>:):):)<:)>";



$text = preg_replace("/(>[^<]*)(:\))/is", "\\1SMILIE", $text);







echo $text;
?>

wordt bij mij:
code:
1
<b>BLAAT!</b>SMILIE:):)<:)>

Acties:
  • 0 Henk 'm!

Verwijderd

Probleem met de regexen is dat als het woord meerdere keren voorkomt tussen tags alleen de eerste keer gematcht wordt (omdat voor een match een > als begin nodig is).

Het idee is natuurlijk hetzelfde als deze.

Je zou ook op /[<>]/ kunnen split()ten, alleen de even elementen van het array dat je terugkrijgt bewerken en vervolgens de stukken weer aan elkaar plakken.
Pagina: 1