Ik ben bezig met een projectje om snel mijn classes e.d. te documenteren. Ik jas de projectfiles door mijn progje, waarna het progje alle classes (en forms, modules enz) door een regex jast.
Alle declaraties worden door die regex eruit gefilterd, en in een XML bestand gegooid, zodat ik er later met een XSL weer mooie documentatie van kan maken.
Nu probeer ik mijn Enums ook in die XML file te gooien, en daar loop ik tegen een probleem aan.
Tot nu toe heb ik gewoon alle declaraties kunnen lezen als ze beginnen met Private/Public/Friend enzovoorts tot het eind van de regel. De regex die ik daar voor gebruik is de volgende:
Hiermee krijg ik netjes alle declaraties en andere zut die ik in mijn documentatie wil opnemen terug.
Nu loopt een enum over meerdere regels:
Die kan ik nog aardig matchen. Maar nu heb ik de volgende code:
Deze krijg ik nu als 1 match terug, in plaats van 2 losse matches. Dit omdat de regex probeert een zo groot mogelijke match te maken. Het pattern dat ik gebruik is als volgt:
Hoe krijg ik mijn regex nu zo ver om hier 2 matches van te maken? Ik heb het volgende al geprobeerd, zonder resultaat:
en allerlei varianten daarop. De helft werkt niet, geeft teveel terug of klapt eruit door teveel matches...
Ik gebruik, mocht dat niet duidelijk zijn, VB6 en het VBScript.Regex object.
Iemand enig idee? Ik zit altijd te ruziën met regexen
Alle declaraties worden door die regex eruit gefilterd, en in een XML bestand gegooid, zodat ik er later met een XSL weer mooie documentatie van kan maken.
Nu probeer ik mijn Enums ook in die XML file te gooien, en daar loop ik tegen een probleem aan.
Tot nu toe heb ik gewoon alle declaraties kunnen lezen als ze beginnen met Private/Public/Friend enzovoorts tot het eind van de regel. De regex die ik daar voor gebruik is de volgende:
code:
1
| [\t ]*(Private|Public|Friend)+ (Static|WithEvents)?(Const|Type|Property|Function|Sub|Event)*.*[^\s] |
Hiermee krijg ik netjes alle declaraties en andere zut die ik in mijn documentatie wil opnemen terug.
Nu loopt een enum over meerdere regels:
code:
1
2
3
4
5
| Private myEnum rood groen blauw End Enum |
Die kan ik nog aardig matchen. Maar nu heb ik de volgende code:
code:
1
2
3
4
5
6
7
8
9
10
11
| Private myEnum1 rood groen blauw End Enum Private myEnum2 jantje pietje klaasje End enum |
Deze krijg ik nu als 1 match terug, in plaats van 2 losse matches. Dit omdat de regex probeert een zo groot mogelijke match te maken. Het pattern dat ik gebruik is als volgt:
code:
1
| [\t ]*(Private|Public|Friend)+ Enum*.*(\s|\S)*.*[^\s]*[\t ]*End Enum |
Hoe krijg ik mijn regex nu zo ver om hier 2 matches van te maken? Ik heb het volgende al geprobeerd, zonder resultaat:
code:
1
2
| [\t ]*(Private|Public|Friend)+ Enum*.*(\s|\S)*.*[^\s]*[\t ]*End Enum[\S] [\t ]*(Private|Public|Friend)+ Enum*.*(\s|\S)*.*[^\s]*[\t ]*^(End Enum)End Enum |
en allerlei varianten daarop. De helft werkt niet, geeft teveel terug of klapt eruit door teveel matches...
Ik gebruik, mocht dat niet duidelijk zijn, VB6 en het VBScript.Regex object.
Iemand enig idee? Ik zit altijd te ruziën met regexen
[ Voor 3% gewijzigd door RobIII op 21-06-2004 16:28 ]
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij