[php/preg] higlighten woorden, niet in < >

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 22:59

chem

Reist de wereld rond

Topicstarter
ik wil graag wat stukken tekst kunnen voorzien van 'ge-highlighte' woorden.

Probleem is echter; wat als iemand als highlight opgeeft: 'table'... dan is je pagina goed de sjaak :+

Arien, tomato, dusty - help me :)

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 18-09 13:29
Tweakers gaat op sommige highlights ook flink in de zeik, dus dan ben je niet de enige :)

Acties:
  • 0 Henk 'm!

Verwijderd

chem: Arien, tomato, dusty - help me :)
Moje effe zoekuh... :+


Deze: [topic=139747]

Acties:
  • 0 Henk 'm!

  • Birk
  • Registratie: Maart 2002
  • Laatst online: 15-02-2019
Op donderdag 28 maart 2002 15:23 schreef chem het volgende:
ik wil graag wat stukken tekst kunnen voorzien van 'ge-highlighte' woorden.

Probleem is echter; wat als iemand als highlight opgeeft: 'table'... dan is je pagina goed de sjaak :+

Arien, tomato, dusty - help me :)
Dan moet je highlights alleen op teksten toepassen buiten de <> dan blijft de lay-out in orde, of bedoel je dat niet?

Dyslexie | Linux | MoZilla | OpenOffice


Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 22:59

chem

Reist de wereld rond

Topicstarter
Op donderdag 28 maart 2002 15:32 schreef Arien het volgende:

[..]

Moje effe zoekuh... :+


Deze: [topic=139747]
daar was ik al naar op zoek geweest :)

ff testen :)

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

Verwijderd

Ik was wel lekker snel, ze zijn geen van allen echt lekker... :(

Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 22:59

chem

Reist de wereld rond

Topicstarter
nee, ze geven allemaal problemen... :(

krijg ook spontane parse error on line 0's ervan enzo...

nog suggesties? :)

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

  • Grum
  • Registratie: Juni 2001
  • Niet online
je kan toch mbv look-ahead/look-back(?) kijken of er wel of niet een < dan wel > voor zit en adh daarvan wel of niet replace ?

http://www.php.net/manual/en/pcre.pattern.syntax.php#regexp.reference.assertions

Acties:
  • 0 Henk 'm!

Verwijderd

chem: Nog suggesties? :)
Beste idee waar ik nu op kan komen:

1. Match vanaf (als in: look-back) een '>' of begin tekst tot aan een '<' (look-ahead).
2. Vervang in de match het zoekwoord globaal.
3. Naar stap 1.

Dus een global replace in een global match (of string functie combo voor '>' en '<' ofzo).

Lijkt dat ergens op? :?

/me is niet zo productief meer... :Z (maar is bijna klaar! 8-))

Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 22:59

chem

Reist de wereld rond

Topicstarter
* chem is geen regexp kenner

ik kan wel wat aanpassen enzo in een bestaande regexp, maar looknack/lookahead/lookaroundthecorner zegt me weinig..

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

Verwijderd

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
my $keyword = "hier";

$_ = <<'HTML';
hier en hier en <hier> zitten
<tag /> tags en ook hier zit een tag</hier 
hier="hier"> en hierin ook. <bla="hier">hier etc.
HTML

sub hi {
    my $text = shift;
    $text =~ s/$keyword/uc $keyword/ego;
    return $text;
}

s/(>|^) ([^<]+) (?=<|$)/$1 . hi($2)/egsx;
print;

In Perl, maar het idee is in PHP zo na te bouwen en te verfraaien en werkt (als ik de wereld nog een beetje begrijp :Z) altijd.

Output:
code:
1
2
3
HIER en HIER en <hier> zitten
<tag> tags en ook HIER zit een tag</hier
hier="hier"> en HIERin ook. HIER<bla>

Relevante stukjes:
code:
1
$text =~ s/$keyword/uc $keyword/ego;

Vervang elke $keyword door de uppercase versie.
code:
1
s/(>|^) ([^<]+) (?=<|$)/$1 . hi($2)/egsx;

Vervang elk stuk vanaf begin van de tekst of een '>' tot aan een '<' f het einde van de tekst (buiten tags dus) door de output van hi subroutine met '>' of niets ervoor.
(Perl kan geen variabele lengte lookbehind op dit moment vandaar de $1.)

Zo gaat ie lukken? :)

Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 22:59

chem

Reist de wereld rond

Topicstarter
bwahhhh leuk stukje :)
ik ga er mee spelen... als 't gelukt is pleur ik de PHP zut hier neer :)

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 22:59

chem

Reist de wereld rond

Topicstarter
met een beetje hulp van een collega :)
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?
     $keyword = 'hier';
     $text = 'hier en hier en <hier> zitten <tag /> tags en ook hier\' zit een tag</hier> en hierin ook. <bla="hier">hier etc.';
     $text2 = preg_replace(
    "/(>|^)([^<]+)(?=<|$)/esx",
                             "'\\1'.str_replace('". $keyword ."','<b>". $keyword ."</b>','\\2')",
                             $text);
     echo "Before:<hr>";
     echo htmlentities($text) ."<hr>";
     echo "<p>After:<hr>";
     echo htmlentities($text2) ."<hr>";?>

[ Voor 31% gewijzigd door ACM op 24-01-2004 14:16 ]

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

  • tomato
  • Registratie: November 1999
  • Niet online
Hmmm, ik vind hem niet zo heel mooi (jammer van die fixed width lookbehind in perlre en dat je replace routine alsnog moet 'zoeken'). Zat meer aan zoiets te denken:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/perl -w

use strict;

$_ = '<hoi> enzo hoi en hoi <hoi en hoi en> hoi hoi <boi> hoi';

my $hl = 'hoi';

s/
    (<[^>]+>)
    |
    (\Q$hl\E)
/
    defined $2 ?
        uc $2
        :
        $1
/xeg;

print;

IMHO is dat veel duidelijker leesbaar de regels wanneer iets gehighlight mag worden zijn gemakkelijker aan te passen :)
Pagina: 1