ich versuche mit Hilfe der Unit-RegExpr aus Lazarus 2.0.10 bzw. FPC 3.2.0 eine Plausibilitätsprüfung der per Commandline übergebenen Parameter durchzuführen.
Ziel soll es sein auf gültige Kombinationen der implementierten Optionen/Commandline-Switches zu prüfen unabhängig von der angegebenen Reihenfolge.
Es wird zum Start des Programms mittels CheckOptions bereits auf gültige Optionen geprüft.
Ich habe entweder das richtige handling von Strings nicht gefunden oder nicht verstanden

Natürlich habe ich bereits einige Tutorials in Bezug auf die Verarbeitung von Strings durchstöbert, komme aber nicht weiter.
Hat evtl. jemand eine Lösung oder einen Denkanstoß für mich?
Meine Anforderung
=============
Gültige Optionen sind:
(-m, --multi), (-h, --help) , (-v, --version), (--console), (-i, --install), (-r, --run), (-u, --uninstall), (-c, --config), (--stop)
Gültige Kombinationen:
-i setzt -r voraus schließt aber mindesten --stop aus
-m setzt (-i und-r) oder (-r und --console) voraus
-i erlaubt zusätzlich -m und/oder -c, aber nicht -h und/oder --console und setzt -r voraus
Ich weiß das es durchaus noch weiter Kombinationen gibt die es gilt zu prüfen. Ich denke aber mit der Lösung der genannten Kombinationen sollte ich das dann auch selbst entsprechend anpassen können.
Mit diesem Beispielprogramm habe ich getestet:
Code: Alles auswählen
program project1;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes
{ you can add units after this }
,SysUtils, RegExpr;
var
RegExprObj: TRegExpr;
Expr, Cmdl: String;
begin
RegExprObj:= TRegExpr.Create;
writeln;
Writeln(Format(' RegExpr-Version = %d.%d', [RegExprObj.VersionMajor, RegExprObj.VersionMinor]));
writeln;
Expr:= '.*(-i)(-r).*';
Cmdl:= 'project1.exe -i -r';
writeln(' Expression: '+ Expr);
writeln(' Commandline: '+ Cmdl);
RegExprObj.Expression:= Expr;
if RegExprObj.Exec(Cmdl) then
writeln('OKAY') else WriteLn('Not OKAY');
RegExprObj.Free;
end.
Code: Alles auswählen
C:\examples\RegExpr>project1
RegExpr-Version = 0.987
Expression: .*((-i)(-r)(?!--stop)).*
Commandline: project1.exe -i -r
An unhandled exception occurred at $0042B12A:
ERegExpr: TRegExpr compile: unrecognized modifier (pos 20)
$0042B12A
$00427BCA
$0042693B
$0042693B
$004259A2
$00429BFB
$00401839 main, line 27 of project1.lpr
Code: Alles auswählen
C:\examples\RegExpr>project1
RegExpr-Version = 0.987
Expression: .*((-i)(-r)).*
Commandline: project1.exe -i -r
Not OKAY