[Regex] Werkt niet zoals verwacht

Pagina: 1
Acties:

Onderwerpen


  • Cypher87
  • Registratie: Oktober 2004
  • Laatst online: 18-09 16:14
Ik de volgende regular expression:

code:
1
{(.*)(==|::)(.*)\|(.*)\|(.*)}


Ik gebruik de .net Regex class om deze te matchen op data.

Bijv:

code:
1
{a==1|x|y}


Dit gaat allemaal perfect zolang ik 1 per regel doe. Doe ik bijv iets als:

code:
1
{a==1|x|y} {b==2|x|y}


dan ziet hij dit als eerste groep:

code:
1
a==1|x|y} {b


Ik heb geen idee hoe ik er voor moet zorgen dat hij dit als 2 afzonderlijke matches ziet (mijn regular expression kennis is niet zo fantastisch). Iemand die mij kan helpen?

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Zoek maar eens op non-greedy matches

If it isn't broken, fix it until it is..


  • ReenL
  • Registratie: Augustus 2010
  • Laatst online: 14-09-2022
of (.*) vervangen door ([^}]*)

(Betekend GEEN } )

  • danslo
  • Registratie: Januari 2003
  • Laatst online: 12:42
Ben zelf ook geen Regex held, maar zou zelf zoiets doen:
code:
1
{([^|]+)\|([^|]+)\|([^}]+)}

  • Cypher87
  • Registratie: Oktober 2004
  • Laatst online: 18-09 16:14
ReenL schreef op donderdag 19 augustus 2010 @ 09:56:
of (.*) vervangen door ([^}]*)

(Betekend GEEN } )
Had ik even moeten zeggen inderdaad, dat had ik ook geprobeerd maar werkte ook niet helemaal.

@Niemand_Anders

Zal ik doen :)

edit:

Gelukt!

code:
1
{(.*?)(==|::)(.*?)\|(.*?)\|(.*?)}

[ Voor 10% gewijzigd door Cypher87 op 19-08-2010 10:34 ]


Acties:
  • 0 Henk 'm!

  • creator1988
  • Registratie: Januari 2007
  • Laatst online: 07:58
Niet makkelijker, efficienter, whatever om gewoon:

code:
1
{\w*==\d*\|\w*\|\w*}


te doen?

Acties:
  • 0 Henk 'm!

  • Cypher87
  • Registratie: Oktober 2004
  • Laatst online: 18-09 16:14
creator1988 schreef op vrijdag 20 augustus 2010 @ 13:01:
Niet makkelijker, efficienter, whatever om gewoon:

code:
1
{\w*==\d*\|\w*\|\w*}


te doen?
Nee, want het moet sowieso alle tekens kunnen bevatten (niet \w en \d dus).

Maar toch bedankt voor het meedenken :)

Acties:
  • 0 Henk 'm!

Verwijderd

creator1988 schreef op vrijdag 20 augustus 2010 @ 13:01:
Niet makkelijker, efficienter, whatever om gewoon:

code:
1
{\w*==\d*\|\w*\|\w*}


te doen?
Behalve dat hij hier nog steeds "greedy" is en zal falen op cijfers. Een '.*?' werkt prima :)

Acties:
  • 0 Henk 'm!

Verwijderd

Maar .*? is zelden nuttig. Vertel eens, wanneer wil je nou *echt* "alles" matchen?

Het is hier veel logischer om te matchen op wat je selectie niet kan bevatten.
Pagina: 1