[ASP] Regular Expression

Pagina: 1
Acties:
  • 201 views sinds 30-01-2008
  • Reageer

  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
Hoi Mensen,

Ik heb verschillende regular expressions die ervoor zorgen dat UBB omgezet word naar HTML op het moment dat iets word laten zien.

Nu wil ik ook een [table] tag maken.

Nu zit ik echter met een probleem

Ik wil met een regular expression een [table] code patroon maken.

Als er een match gevonden word. moet hij BINNEN die match dingen aanpassen.

Bijvoorbeeld:
code:
1
2
3
4
[table][tr]
[td]blabla tekstje!!![/td]
[td]nog meer tekst!!![/td]
[/tr][/table]


Dat matched dus mijn patroon:

hoe kan ik nu BINNEN die string [td] doorr <td> veranderen enzovoort.

Dus niet in heel het bericht maar alleen binnen die match om te voorkomen dat hij buiten een tabel [td] ook veranderd in [/td]!

Alvast bedankt!

  • gorgi_19
  • Registratie: Mei 2002
  • Nu online

gorgi_19

Kruimeltjes zijn weer op :9

Ik vraag me af of dit de oplossing is. Ik denk dat je eerder moet zoeken naar een stack based parser. Zij bijvoorbeeld [rml][ ASP] Regular expression nesten[/rml]

Eea moet hier ook wel met de search over te vinden zijn; weliswaar grotendeels voor PHP, maar het geeft inzichten in hoe dit buitkbaar is voor ASP :)
search

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
Ik had wel iets verzonnen maar het werkt niet:

code:
1
2
3
4
5
6
7
8
9
10
'' TABLE Tag  ''
RegExpr.Pattern = "\\[Table([ bgcolor=(Red|Blue|)]*)]([td)\]+[\\[tr\]]+((.|\n)*?)[\\[/td\]+[\\[/tr\]]+)\\[/Table\]"
Dim objMatch
For Each objMatch in Bericht
    Bericht = RegExpr.Replace(Bericht, "<table $1>$3</table>")
    Bericht = Replace(Bericht, "[td]", "<td $2>")
    Bericht = Replace(Bericht, "[tr]", "<tr>")
    Bericht = Replace(Bericht, "[/td]", "</td>")
    Bericht = Replace(Bericht, "[/tr]", "</tr>")
Next


maar dit wil niet werken...

Is er echt geen manier om dingen binnen een matched stuk string van een regular expression aan te passen?

  • gorgi_19
  • Registratie: Mei 2002
  • Nu online

gorgi_19

Kruimeltjes zijn weer op :9

Zet om te beginnen objMatch eens op je scherm. :) En ik ben heel benieuwd hoe je nu onafgesloten tags gaat oplossen.. :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Vergeef het me alsjeblieft als ik iets doms zeg, maar moet dit niet gewoon met php?

[ Voor 2% gewijzigd door Verwijderd op 13-08-2004 21:56 . Reden: typfoutje ]


  • gorgi_19
  • Registratie: Mei 2002
  • Nu online

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 13 augustus 2004 @ 21:56:
Vergeef het me alsjeblieft als ik iets doms zeg, maar moet dit niet gewoon met php?
Waarom? :? In ASP is dit ook goed mogelijk. Of gaat iedereen massaal van ASP / PHP overstappen, als ik zeg dat dit bijvoorbeeld in C# ook eenvoudig voor elkaar te krijgen is? :)

Maar goed, ontopic weer. :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 19-05 21:24

NMe

Quia Ego Sic Dico.

Wat jij wil kan gewoon niet in ASP met regular expressions, en in Perl of PHP ook niet optimaal. Het regular expression object dat in ASP gebruikt wordt is erg simpel, en je kan er niet echt uitgebreide dingen mee.
In dit topic is de term stack based parser al eens voorbij gekomen. Ik denk dat je daar beter op kan zoeken. Lees doorvoor ook eerst wat over tokenizen. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • sorted.bits
  • Registratie: Januari 2000
  • Laatst online: 06:33
Misschien beetje offtopic, maar erg fijn bij Regular Expressions, gebruik ik altijd het volgende proggie : RegExpEditor.

Verwijderd

Right........ 8)7 K dacht dat t in php vrij simpel was, maar ik vergis me waarschijnlijk.

[ Voor 82% gewijzigd door Verwijderd op 13-08-2004 22:55 . Reden: ik was te snel ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 13:54

crisp

Devver

Pixelated

De meeste talen ondersteunen het gebruik van functies binnen een reguliere expressie waaraan je je match kunt doorgeven; je kan dan binnen die functie weer reguliere expressies gebruiken om verder te matchen. PHP kent bijvoorbeeld de /e modifier en _replace_callback en in javascript kan je gewoon dit doen:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
var string = '[table][tr][td]blaat[/td][/tr][/table]';
var re = /\\[table\](.*?)\\[\/table\]/gi
string = string.replace(re, function($0,$1) { return other_function($1) });

function other_function(match) {

  var re = /\\[tr\](.*?)\\[\/tr\]/gi
  match = match.replace(re, '<tr>$1</tr>');
  re = /\\[td\](.*?)\\[\/td\]/gi
  match = match.replace(re, '<td>$1</td>');

  return ('<table>'+match+'</table>');

}

wellicht is dit ook mogelijk in JScript in ASP, VB is volgens mij zwaar beperkt als het op reguliere expressies aankomt...

[ Voor 5% gewijzigd door crisp op 14-08-2004 12:36 ]

Intentionally left blank


Verwijderd

crisp schreef op 14 augustus 2004 @ 12:32:

wellicht is dit ook mogelijk in JScript in ASP, VB is volgens mij zwaar beperkt als het op reguliere expressies aankomt...
Je kunt beter (met bijvoorbeeld regular expressions) een stuk tekst/code opdelen in stukjes (tokens). Een stukje is dan een stuk tekst zonder code, een tag, een newline, of een ander deel van de 'opmaaktaal'.

Vervolgens ga je die stukjes aflopen en maak je gebruik van recursie waar dat nodig is. Als je een recursieve functie induikt dan gooi je de huidige 'context' op een stack, en als de functie 'returnt' dan haal je weer iets van de stack af. Die methode werkt feilloos en is eenvoudig uitbreidbaar.

Doe niet _alles_ met regular expressions, want volgens mij zijn deze nooit bedoeld om complexe operaties in hun eentje uit te voeren. Ze zijn er om te helpen bij het herkennen van patronen. Recursie wordt nog amper ondersteund, en het gevolg daarvan is dat er ernstige beperkingen zijn.

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 13:54

crisp

Devver

Pixelated

Recursie is een ander verhaal; voor simpele tag-replacement voldoet een reguliere expressie in 95% van de gevallen wel, maar geneste tags zijn inderdaad lastig. Ik ken eigenlijk alleen recursie binnen reguliere expressies in PHP en Perl, en dat is best nog wel ingewikkeld. Een combo van een stack en reguliere expressies voor het matchen van tags en het vullen van de stack is inderdaad het mooist, duidelijkst en snelst.

Intentionally left blank

Pagina: 1