Hep,
Ja, kann es auch (du hast selbst den Teil in der REc. verlink, wo das gesagt wird, aber das produziert nur wohlgeformte Dokumente).
Wo steht das dies wohlgeformt und mit SystemID valide ist?
Fragezeichen heisst einfach "optional".
Eben, das ist der Knackpunkt.
Ein paar Beispiele:
$REG = "/((SYSTEM 'foo')|(PUBLIC 'foo' 'foo'))?/";echo preg_match($REG, "");
- echo preg_match($REG, "blabla"); <-- muss eine Fehlermeldung zurückgeben.
- echo preg_match($REG, "SYSTEM"); <-- muss eine Fehlermeldung zurückgeben.
echo preg_match($REG, "SYSTEM 'foo'");
- echo preg_match($REG, "PUBLIC"); <-- muss eine Fehlermeldung zurückgeben.
- echo preg_match($REG, "PUBLIC 'foo'"); <-- muss eine Fehlermeldung zurückgeben.
echo preg_match($REG, "PUBLIC 'foo' 'foo'");
Ergebnis -> alle Ausdrücke sind “wahr”.
Das muss du mir aber erklären: 1,2, 3 und 4 entsprechen definitiv nicht den Regeln.
Richtig, ich wollte damit demonstrieren das man jeden Blödsinn schreiben kann und der Ausdruck IMMER wahr ist.
Es ligt an mir, aber ich verstehen nicht, was du daran nicht verstehst.
*Seufz*, neuer Versuch:
"'PUBLIC' S PubidLiteral S SystemLiteral" ODER "'SYSTEM' S SystemLiteral" ist gültig, ok?!
Da aber beides optional ist (eben wegen dem ? außen herum):
('PUBLIC' S PubidLiteral S SystemLiteral ODER 'SYSTEM' S SystemLiteral)?
spielt es überhaupt keine Rolle ob einer der beiden Ausdrücke innerhalb der Klammer gültig ist; und eben das habe ich demonstriert.
symbol := alternative1 | alternative2 ...
Genau, aber es lautet weiterhin (symbol)?, demnach ist egal was „symbol“ ergibt, d.h. ob alternative1 oder alternative2 überhaupt vorhanden ist, oder schlichten Blödsinn darstellen.
Wenn alternative1 ODER alternative2 „blabla“ lauten (s.o.) ist zwar „symbol“ ungültig aber wegen dem „?“ doch wieder gültig da es dann ignoriert wird (bzw. ignoriert werden muss). „fehlen“ und „falsch“ bedeutet beim „?“ das selbe und werden ignoriert (zumindest bei RegExp).
? = 0 oder 1
Und 0 bedeutet in diesen Fall „falsch“ oder „fehlt“ -> also immer WAHR.
Meiner Ansicht nach fehlt ein Ausdruck nach dem Muster:
„Wenn einer der beiden Alternativen vorhanden ist, muss diese gültig sein. Sollte diese nicht gültig sein, ist (S ExternalID) FALSCH (und nicht optional, da es sonst wieder WAHR wird)“.
Ich hoffe das Du mich jetzt verstanden hast und ich nicht einen bitterbösen logischen Fehler erliege ;-))
Viele Grüße
Thomas