Was hältst Du davon?
Nix, da der Ansatz in einem XML-Schema nicht durchführbar ist, was wie gesagt der Zweck der Sache ist.
Ansonsten könnt es vielleicht klappen, ist aber sehr umständlich, wenn man eh schon einen Parser zur Hand hat…
Was hältst Du davon?
Nix, da der Ansatz in einem XML-Schema nicht durchführbar ist, was wie gesagt der Zweck der Sache ist.
Ansonsten könnt es vielleicht klappen, ist aber sehr umständlich, wenn man eh schon einen Parser zur Hand hat…
Ich hab mal ein ‚hands on‘-Beispiel für den
Hausgebrauch gebastelt (verbesserungen er-
wünscht):use strict;
use warnings;my $t_ok = ‚(3+4*(6/4+(6*-8)+7))‘;
my $t_no = ‚(3+4*(6/4+(6*-8)+7)))‘;
my $rg;$rg = qr{ (
(?:
(?> [^()]+)
|
(??{ $rg })
)*
)
}x;for ($t_ok, $t_no) {
my ($result) = /$rg/g;
(my $differ = $_) =~ s/\Q$result\E//;
print '-'x59, „\n“, ($_ eq $result ? ‚OK‘:‚ERROR‘), „: $_
==> $differ\n“;
}Das liefert im beschriebenen
Falle:
OK: (3+4*(6/4+(6*-8)+7)) ==>
ERROR: (3+4*(6/4+(6*-8)+7))) ==> )
Sieht gut aus, lässt vermutlich aber auch noch so etwas wie
my $t_ok = ‚(3++++4)‘;
durch, oder? Man könnte noch Zahlen und Operatoren explizit erkennen.
Zahl= (-?[0-9]+.[0-9]+)
Operator: [+-*/%] o.ä.
Kette mehrere Terme: Zahl(OperatorZahl)*
Ich kanns gerade leider hier nicht testen…