Toon posts:

[Regex] Uitzonderingen op match mogelijk?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

ik ben even aan het stoeien geweest met een regex die een bepaald patroon zoekt, waarop ook uitzonderingen mogelijk zijn, maar tot nu toe is het me niet gelukt . Misschien is het niet mogelijk? :P

Het is de bedoeling dat mijn regex een patroon van een aantal tekens (2) vindt, omsloten door 2 "-" tekens, bijvoorbeeld;

-AB-, -DG-, -JF-

Dit wordt gebruikt om landencodes te zoeken. Het probleem is dat er een aantal landen niet moet worden gepakt door de regex, bijvoorbeeld -NL-, -DE-. De regex die ik heb om de landcodes te vinden is;

(\-([A-Z]{2})\-)

Alle landen vinden is geen probleem, alleen de uitzonderingen erin krijgen is minder 8)7

Weet iemand of dit sowieso mogelijk is met regexen, en indien dit mogelijk is, hoe?

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 14:58
Het ís mogelijk: -(N[A-KM-Z]|D[A-DF-Z]|[A-CE-MO-Z][A-Z])-. Lees als: N gevolgd door een andere letter dan L, of D gevolgd door een andere letter dan E, of een tweetal letters waarvan de eerste geen N of D is.

Is het ook handig? Nee, niet echt, het is heel lastig te lezen en te bewerken. Waarschijnlijk is het verstandiger om deze uitzondering in je code af te handelen, in plaats van 'm in de reguliere expressie te coderen.

[ Voor 6% gewijzigd door Soultaker op 22-01-2007 19:34 ]


Verwijderd

Topicstarter
Danku, ik hoopte dat er misschien een manier was om te zeggen dat hij die andere termen moest uitsluiten. Dan moet het via de code O-)

Bedankt voor de hulp!

  • Xcalibur
  • Registratie: Augustus 2002
  • Laatst online: 12:22
Regex is bedoeld om een bepaalde volgorde in een string te vinden, bijvoorbeeld 2 letters omgeven door 2 streepjes. En dat werkt natuurlijk prima :) ... Als je op die bepaalde volgorde uitzonderingen wilt maken is het niet handig om dat met Regex te doen. Het kan wel, zoals hierboven, maar het is omslachtig, zeker als er later nog een derde of een vierde land bij komt... .

Makkelijker is om van te voren, of wellicht achteraf, de bepaalde matches er eerst uit te filteren. Of te zorgen dat ze niet in de vorm van de Regex voorkomen (dus *NL* ipv -NL-).

Designer | Developer | Director | Photographer | LARPer | Geek | Male | 39


  • Gonadan
  • Registratie: Februari 2004
  • Nu online

Gonadan

Admin Beeld & Geluid, Harde Waren
Verwijderd schreef op maandag 22 januari 2007 @ 20:23:
Danku, ik hoopte dat er misschien een manier was om te zeggen dat hij die andere termen moest uitsluiten. Dan moet het via de code O-)

Bedankt voor de hulp!
Het is wel mogelijk.
Je kunt via 'vooruit lezen' en conditionele patronen heel veel doen met regexen.
Maar zoals Soultaker al zegt kan je dat beter in je code afhandelen.

Bijvoorbeeld:
PHP:
1
2
$excepts = array('NL', 'DE');
foreach ($out as $key => $value) if (in_array($value, $excepts)) unset($out[$key]);

Waarbij $out het resultaat van je regex is. (array) :)

Look for the signal in your life, not the noise.

Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8