[RegEx]Probleem met karakters uitsluiten

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

  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Topicstarter
Ik ben bezig met een UBB parser aan het bouwen in ASP.NET. Nu heb ik die parser gebasseerd op Regular Expressions. Ze werken heel fijn, maar ik heb er soms nog wat problemen mee.

Nu heb ik een probleem, waarbij ik op internet nou niet echt een oplossing voor kon vinden.

Ik wil URL tags gaan replacen naar HTML tags. De volgende URL's moeten worden vervangen:
code:
1
2
3
4
[url=http://www.blaat.nl]blaat[/url]
[url="http://www.blaat.nl]blaat[/url]
[url]http://www.blaat.nl[/url]
http://www.blaat.nl


Nu heb ik hiervoor 2 regular expression gebouwd, omdat bij 2 type URL's een naam bij zit en bij de andere 2 niet.

De volgen expressie heb ik voor de bovenste 2:
code:
1
2
\\[url\="?(?<link>(http|https|ftp|gopher|mailto)\:\/\/([a-zA-Z0-9\:\-=&\?\.\/%]+)?)
"?\](?<name>.*?)\\[\/url\]
met als replace expressie:
code:
1
<a href="${link}" target="_blank">${name}</a>


En de volgende voor de onderste 2:
code:
1
2
(\\[url\])?(?<link>(http|https|ftp|gopher|mailto)\:\/\/([a-zA-Z0-9\:\-=&\?\.\/%]+)?)
(\\[\/url\])?
met als replace expressie:
code:
1
<a href="${link}" target="_blank">${link}</a>


Nu werken deze 2 elkaar tegen. Bij die onderste replaced die zo ook de url's die bij de bovenste hoort, dit wil ik niet.

Nu kan je controleren of er niet toevallig
code:
1
[url=
ervoor staat.

Nu weet ik dat je met [^karakter] karakters kan uitsluiten. Maar als ik dit:
code:
1
2
[^u][^r][^l][^=][^"]? 
(met die " als optie, omdat hij ook kan ontbreken)
ervoor ga zetten, werkt dat niet.

Maar hoe los ik dit probleem op :? Zodat die onderste de URL's van de bovenste niet verplaatst :?

[ Voor 27% gewijzigd door eghie op 27-10-2004 10:57 ]


  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 22-04 07:04
En als je de volgorde van de 2 replaces omdraait?

  • PommeFritz
  • Registratie: Augustus 2001
  • Laatst online: 24-11-2025

PommeFritz

...geen friet

Ik weet niet wat je in asp.net allemaal kan met regexes, maar ik gebruik de volgende met succes:
code:
1
'\\[url(?:=([^]]*))?\](.*?)\\[/url\]'

De eerste match group is leeg, of gevuld, afhankelijk van welke url tag vorm je gebruikt. In mijn code check ik dat en als ie leeg is, pak ik de tweede match group (die dus tussen de url tags in staat) als href adres.

FireFox - neem het web in eigen hand


  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Topicstarter
Sjaaky schreef op 27 oktober 2004 @ 10:58:
En als je de volgorde van de 2 replaces omdraait?
Dit gaat niet werken.
PommeFritz schreef op 27 oktober 2004 @ 11:24:
Ik weet niet wat je in asp.net allemaal kan met regexes, maar ik gebruik de volgende met succes:
code:
1
'\\[url(?:=([^]]*))?\](.*?)\\[/url\]'

De eerste match group is leeg, of gevuld, afhankelijk van welke url tag vorm je gebruikt. In mijn code check ik dat en als ie leeg is, pak ik de tweede match group (die dus tussen de url tags in staat) als href adres.
In asp.net kun je vrijwel alles met regexps, wat je met andere talen ook kunt.

Jouw expressie is trouwens bijna hetzelfde als die van mij, alleen die van mij voeren iets meer check uit en bij die van jouw gaan waarschijnlijk de aanhalingstekens ook problemen geven. Plus dat die van jou met deze gewoon op z'n bek gaat (met matchen niet, maar wel met replacen):
code:
1
2
[url=http://www.blaat.nl]blaatje[/url]
[url]http://www.blaat.nl[/url]

Die van jou kan niet deze 2 allebei goed replacen, omdat je met de naam van de URL zit. Daar zat ik ook mee, dus gebruik ik 2 expressies.

En dat wat je met jouw expressie bereikt lukt me ook wel met deze expressies, maar het probleem zit het in automatisch url's bouwen van url's die geen url tags bevatten.

Ik probeer namelijk m'n UBB parser, iig zo te krijgen dat hij ACM's test bestandje accepteerd. (test bestand)

[ Voor 42% gewijzigd door eghie op 27-10-2004 11:49 ]


  • PommeFritz
  • Registratie: Augustus 2001
  • Laatst online: 24-11-2025

PommeFritz

...geen friet

Die van jou kan niet deze 2 allebei goed replacen, omdat je met de naam van de URL zit. Daar zat ik ook mee, dus gebruik ik 2 expressies.
Uhh... bij mij doet ie het hoor :)
Zoals ik hierboven al uitlegde heeft ie 2 matchgroepen waarvan de 1e al of niet gevuld is, afhankelijk van welke vorm je url-tag heeft.

FireFox - neem het web in eigen hand


  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Topicstarter
Een klein subtiel schopje. O-)
PommeFritz schreef op 27 oktober 2004 @ 14:36:
[...]

Uhh... bij mij doet ie het hoor :)
Zoals ik hierboven al uitlegde heeft ie 2 matchgroepen waarvan de 1e al of niet gevuld is, afhankelijk van welke vorm je url-tag heeft.
Eehh, sorry niet goed gelezen. Ik ga hier dus morgen even mee klooien, om dat zo te krijgen, maar dan heb ik mijn probleem nog niet opgelost. Die beide vormen werken namelijk wel, maar automatisch URL's bouwen van losse URL's (zonder URL tags) lukt niet goed. Het gaat wel, maar dan pakt hij ook meteen die URL's mee die binnen de URL tags staan en dan krijg je dus dat ze 2 keer door de replace worden gehaald en dat krijg je het volgende:
HTML:
1
2
3
4
<a href="<a href="http://www.linkje.nl" target="_blank">
http://www.linkje.nl</a>">
<a href="http://www.linkje.nl" target="_blank">
http://www.linkje.nl</a></a>
En dit klopt dus niet echt.

Iemand hier een oplossing voor :?

[ Voor 21% gewijzigd door eghie op 28-10-2004 21:46 ]


  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Topicstarter
Schopje O-)

  • Cavorka
  • Registratie: April 2003
  • Laatst online: 27-03-2018

Cavorka

Internet Entrepreneur

http://www.weitz.de/regex-coach/

All you need. Ik heb echt een hele tijd lopen kloten voordat ik regular expressions begreep en dit programma'tje heeft er zeer veel aan bijgedragen.

the-blueprints.com - The largest free blueprint collection on the internet: 50000+ drawings.


  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Topicstarter
Cavorka schreef op 01 november 2004 @ 12:50:
http://www.weitz.de/regex-coach/

All you need. Ik heb echt een hele tijd lopen kloten voordat ik regular expressions begreep en dit programma'tje heeft er zeer veel aan bijgedragen.
Bedankt :> Alleen heb ik zelf zo'n soort van progje gebouwd om regular expressions te testen en in matches op te delen etc.. En ik begrijp ze nu ook wel. Alleen kom er niet echt uit hoe ik dit het beste kan oplossen.
Pagina: 1