[C#] Regular expressions in config file

Pagina: 1
Acties:

  • WalterTamboer
  • Registratie: December 2003
  • Laatst online: 13-01-2017
Hey,

ik heb een token parser geschreven in C#. Nu wil ik daar een configuratie bestand aan hangen.

Dit komt er als volgt uit te zien:

code:
1
2
3
4
LETTER    [a-zA-Z]
DIGIT        [0-9]
STRING     {LETTER}({LETTER}|{DIGIT})*
etc.


zoals je ziet geef ik eerst een type of en vervolgens een regular expression.

Mijn vraag nu, hoe kan ik er voor zorgen dat ik een bestand kan scannen op deze types?

Ik denk dat ik, als ik een bestand scan, ik het wel letter voor letter moet door nemen en ik er niet echte regular expressions overheen kan gooien. Of zit ik hier fout?

  • Twilight Burn
  • Registratie: Juni 2000
  • Laatst online: 16-02 23:04
Als je zorgt dat er een herkenbare "overgang" tussen de regex en de naam zit, kun je deze ook weer met een regex uitlezen. In dit geval kunnen dat 1 of meer spaties zijn, maar dan moet je wel zorgen dat er geen spaties in de naam mogen zitten.

[edit]
De volgende regex zou het uit moeten kunnen lezen (met RegexOptions.Multiline aan):
code:
1
(\w+)\s+(.*)


Met de .Replace(<string>) functie kun je dan de twee verschillende delen weer uitlezen. .Replace("$1") zou de naam terug moeten geven en .Replace("$2") de regex zelf.

[ Voor 39% gewijzigd door Twilight Burn op 29-10-2005 12:59 ]


  • beany
  • Registratie: Juni 2001
  • Laatst online: 19:51

beany

Meeheheheheh

kan je je eigen tokenparser niet gebruiken?

Dagelijkse stats bronnen: https://x.com/GeneralStaffUA en https://www.facebook.com/GeneralStaff.ua


  • WalterTamboer
  • Registratie: December 2003
  • Laatst online: 13-01-2017
Misschien ben ik niet helemaal duidelijk geweest.

Ik kan het configuratie bestand wel lezen. maar dan heb ik dus bijvoorbeeld:

code:
1
2
3
4
array
{
  [LETTER] => [a-zA-Z]
}


maar wat als ik nu bijvoorbeeld een bestand met het volgende heb:

code:
1
log("hello world");


die regel moet ik dan scannen met de regex [a-zA-Z] en die moet het volgende produceren:

code:
1
2
3
4
5
6
l = LETTER
o = LETTER
g = LETTER
( = UNKNOWN
" = UNKNOWN
etc.