[VB.NET]Regular Expressions replace probleem

Pagina: 1
Acties:

  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Topicstarter
Ik ben nu een UBB parser aan het bouwen (altans dat probeer ik) gebasseerd op regular expression. Ze werken best mooi, maar ik stuit nu op een paar problemen.

Ik ben nu bezig met de img-tag en ik krijg het maar niet echt voor elkaar om het goed te krijgen. Ik begrijp inmiddels hoe regular expressions werken (thnx to drm (tutorial) _/-\o_ ), maar ik snap niet wat ik hier fout doe.

de volgende tags moeten worden ondersteund:
code:
1
2
3
4
[img]http://...[/img]
[img=400]http://...[/img] //die 400 = width
[img=400,300]http://...[/img] //die 400 = width en 300 = height
[img=400,300,1]http://...[/img] //zelfde als hierboven alleen 1 = border


Nu gebruik ik deze methode om de boel te replacen:
Visual Basic .NET:
1
2
Dim ImageTag As New Regex(ImageExpression, RegexOptions.IgnoreCase)
UBB = ImageTag.Replace(UBB, ImageReplace)


Waarbij de Regular expression (in variable ImageExpression) is:
code:
1
\\[img=?(?<width>[0-9]*?),?(?<height>[0-9]*?),?(?<border>[0-9]*?)\](?<image>.*?)\\[/img\]


En de replace code is:
code:
1
[img]""${image}""[/img]

Nu heb ik hierbij een problemen.
code:
1
[img=400,300]http://...[/img]

Hierbij pakt hij die 300 als border en die 400 als height, maar dat wil ik niet. Ik wil gewoon dat hij de volgorde gewoon normaal aanhoud. Ik krijg dan dus deze HTML:
HTML:
1
[img]"http://..."[/img]

Ik wil eigenlijk deze html krijgen:
HTML:
1
[img]"http://..."[/img]
Ik wil dus dat hij de goede volgorde aanhoud met die tokens (zo heten ze toch :?) en dan als bijv. border leeg is, dat hij dan ook niet border meegeeft in de html.

Hoe krijg ik dat met regular expressions voor elkaar?

Samenvatting:
code:
1
2
3
4
[img]http://...[/img]
[img=400]http://...[/img]
[img=400,300]http://...[/img] 
[img=400,300,1]http://...[/img]

Voor deze meuk krijg ik deze html als output en dat is fout:
code:
1
2
3
4
[img]"http://..."[/img]
[img]"http://..."[/img]
[img]"http://..."[/img]
[img]"http://..."[/img]

[ Voor 26% gewijzigd door eghie op 19-10-2004 18:48 ]


  • ygma!l
  • Registratie: December 2002
  • Laatst online: 05-05 11:51
Het probleem heeft te maken met plaatsing van komma's. Omdat jij in het 2e geval
code:
1
[img=400]http://...[/img] //die 400 = width

maar 1 optie mee stuurt ziet hij dit als de laatste 'border'. Waarschijnlijk is het probleem opgelost als je er 2 komma's achter zou zetten, maar dat is waarschijnlijk geen optie. Wat je zou kunnen doen is om de html expressie te veranderen in dit:
code:
1
[img]""${image}""[/img]

Ik weet niet of dit werkt, maar je zou het kunnen proberen...

  • SuperRembo
  • Registratie: Juni 2000
  • Laatst online: 20-08-2025
Het gaat hier duidelijk om de haakjes. Even een testje om het wat overzichtelijker te houden.

RegExp:
code:
1
^(?<a>\w+?)(,(?<b>\w+?))?(,(?<c>\w+?))?$


Test:
code:
1
2
3
4
5
6
7
8
input: aap
matches: a=aap

input: aap,noot
matches: a=aap, b=noot

input: aap,noot,mies
matches: a=aap, b=noot, c=mies

[ Voor 10% gewijzigd door SuperRembo op 20-10-2004 09:02 ]

| Toen / Nu


  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Topicstarter
SuperRembo schreef op 20 oktober 2004 @ 09:01:
Het gaat hier duidelijk om de haakjes. Even een testje om het wat overzichtelijker te houden.

RegExp:
code:
1
^(?<a>\w+?)(,(?<b>\w+?))?(,(?<c>\w+?))?$


Test:
code:
1
2
3
4
5
6
7
8
input: aap
matches: a=aap

input: aap,noot
matches: a=aap, b=noot

input: aap,noot,mies
matches: a=aap, b=noot, c=mies
Thnx, dat is hem. Dit is nu mijn nieuwe RegEx:
code:
1
\\[img(=(?<width>[0-9]*?))?(,(?<height>[0-9]*?))?(,(?<border>[0-9]*?))?\](?<image>.*?)\\[/img\]
ygma!l schreef op 20 oktober 2004 @ 08:15:
Het probleem heeft te maken met plaatsing van komma's. Omdat jij in het 2e geval
code:
1
[img=400]http://...[/img] //die 400 = width

maar 1 optie mee stuurt ziet hij dit als de laatste 'border'. Waarschijnlijk is het probleem opgelost als je er 2 komma's achter zou zetten, maar dat is waarschijnlijk geen optie. Wat je zou kunnen doen is om de html expressie te veranderen in dit:
code:
1
[img]""${image}""[/img]

Ik weet niet of dit werkt, maar je zou het kunnen proberen...
Dat is een optie, maar niet echt een mooie en dat moet ik dan de hele tijd in de gaten gaan houden als ik andere dingen erbij in bouw. Is niet echt fijn.

Ik moet dus beter die haakjes gebruiken. Thnx _/-\o_

Ik kan je wel zeggen dat die regular expressions wel een donders gepiel zijn. Ik weet nog niet echt waar ik wel en geen haakjes moet gebruiken, maar van fouten leert men, dus dat komt wel goed. Ik weet wel dat je met haakjes groepen maakt, maar wanneer weet ik nog niet echt. Ja op sommige punten is het wel duidelijk, maar op sommigen ook iets minder duidelijk. Maarja, met genoeg proberen en verbeteren gaat het me wel lukken.

[ Voor 17% gewijzigd door eghie op 20-10-2004 10:11 ]